c++ - 给定二叉树是否为二叉搜索树

标签 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 return?(如果有NULL)

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

最佳答案

应该是这样的

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);
}

关于c++ - 给定二叉树是否为二叉搜索树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43717741/

相关文章:

c++ - char* 类型的值不能用于初始化 "char"类型的实体

java - Big O - 不了解这些算法的时间复杂度?

javascript - 如何使用 AngularJS 处理数据的递归呈现

C++:虚方法

c++ - Netbeans C++ 错误 : 193

c++ - 指向类的私有(private)数据成员的指针

Java树数据结构实现

algorithm - 如何解决带间隙条件的LCS(最长公共(public)子序列)

python - Numpy:具有特定条件的线性系统。没有消极的解决方案

tree - Prolog中的有序树遍历