如果给定的二叉树是二叉搜索树,我编写了一个返回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)
帮我改进一下! 提前谢谢!
答案 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);
}