有人可以帮我解决逻辑错误的地方吗? 问题如果树是否为BST,您需要知道树的根
节点左子树中每个节点的DATA值小于该节点的数据值。 节点右子树中每个节点的DATA值大于该节点的数据值。 给定二叉树的根节点,您能否确定它是否也是二叉搜索树?
boolean checkBST(Node root) {
if(root.left==null && root.right==null)
return true;
if(root.left!=null) {
if(root.data<root.left.data)
checkBST(root.left);
else
return false;
}
if(root.right!=null) {
if(root.data>root.right.data)
checkBST(root.right);
else
return false;
}
return true;
}
答案 0 :(得分:0)
您的比较相反。如果这是有效的BST,则根中的数据应不小于其左子树中的数据,并且类似地,根中的值应不大于其右子树中的数据。
另请注意,在上面的陈述中我包括了相等 - 通常BST允许相等的元素,它们可以放在左侧或右侧。
最后一个最重要的一点 - 如果这是一个有效的BST,那么root应该不小于其左子树中的所有节点。您只将值与左子树的根进行比较。但是,左子树的根小于ITS右子树中的所有音符,因此这些节点可能比原始根更大。考虑这个例子:
10
/
5
/ \
3 13
根据您的检查,这是一个有效的BST,而事实并非如此。
答案 1 :(得分:0)
BST具有以下属性。
bool isBst(Node *node, int left = INT_MIN, int right = INT_MAX){
if (!node)
return true;
if (node->data < left || node->data > right)
return false;
return isBst(node->left, left, node->data)
&& isBst(node->right, node->data, right);
}