给出二叉树是否是二叉搜索树

时间:2017-05-01 10:36:32

标签: c++ algorithm tree binary-search-tree

如果给定的二叉树是二叉搜索树,我编写了一个返回true的函数,否则返回false。

bool IsBst(node* root)
{
    if(root->left == NULL && root->right == NULL)
    {
        return true;
    }
    if(root->left->data <= root->data && root->right->data > root->data)
    {
        return (IsBst(root->left) && IsBst(root->right))
    }
    else
    {
        else false;
    }
}

我的功能是对的吗?

这个功能会回答正确答案吗?

我怀疑如果left child为null,那么这个比较root->left->data<=root->data会返回什么?(如果有NULL)

帮我改进一下! 提前谢谢!

1 个答案:

答案 0 :(得分:1)

应该是

bool IsBst(const node* root, node* minNode = nullptr, node* maxNode = nullptr)
{
    if (root == nullptr) {
        return true;
    }
    if (minNode != nullptr && root->data < minNode->data)
    {
        return false;
    }
    if (maxNode != nullptr && maxNode->data < root->data)
    {
        return false;
    }
    return IsBst(root->left, minNode, root)
        && IsBst(root->right, root, maxNode);
}