C++ 给定的二叉树是否为二叉搜索树

C++ 给定的二叉树是否为二叉搜索树,c++,algorithm,tree,binary-search-tree,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 &

我编写了一个函数,如果给定的二叉树是二叉搜索树,则返回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;
    }
}
bool-IsBst(节点*根)
{
if(root->left==NULL&&root->right==NULL)
{
返回true;
}
如果(根->左->数据数据&根->右->数据>根->数据)
{
返回(IsBst(根->左)和&IsBst(根->右))
}
其他的
{
否则错误;
}
}
我的功能正确吗

这个函数会返回正确答案吗

我怀疑如果left child为null,那么这个比较
root->left->datadata
将返回什么?(如果有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);
}
bool IsBst(const node*root,node*minNode=nullptr,node*maxNode=nullptr)
{
if(root==nullptr){
返回true;
}
if(minNode!=nullptr&&root->datadata)
{
返回false;
}
if(maxNode!=nullptr&&maxNode->datadata)
{
返回false;
}
返回IsBst(根->左,minNode,根)
&&IsBst(根->右,根,maxNode);
}

否。5 left 3 right 9失败。如果
left
nullptr
而不是
right
,则您有UB。@Jarod42 UB的意思是???@xaxxon您的意思是root=5,那么在5的左边是3,在3的右边是9??在最简单的情况下,root=NULL会崩溃。这不是正确答案。请看我对这个问题的评论。@xaxxon:算法现在应该被修复了。你能添加评论以便我能清楚地理解吗@JAROD42主要维护节点允许的最小值和最大值。