我正在检查树是否是二叉搜索树。我知道已知的解决方案是什么。在我查找之前,我想出了基于后订单遍历的以下尝试。我已经手工追踪它,似乎有道理。但是,这是不正确的。谁能帮我理解为什么?
class Node {
int data;
Node left;
Node right;
}
boolean checkBST(Node root) {
// Empty tree
if (root == null) {
return true;
}
// Sub trees are BST
boolean valid = checkBST(root.left) && checkBST(root.right);
// Greater than left
if (root.left != null) {
valid = valid && root.data > root.left.data;
}
// Less than right
if (root.right != null) {
valid = valid && root.data < root.right.data;
}
return valid;
}
答案 0 :(得分:4)
此基本测试用例的代码将失败,因为它对于以下内容返回true:
50
/
3
/ \
1 100
问题是您的代码只是将节点与其直接子节点进行比较,而不是与整个子树进行比较。对于以3 为根的子树,它返回true 因为 3&lt; 50 ,你的代码最终返回true,这是错误的。