为什么isBinarySearchTree()函数不正确

时间:2018-01-15 18:04:22

标签: java algorithm recursion tree binary-tree

我正在检查树是否是二叉搜索树。我知道已知的解决方案是什么。在我查找之前,我想出了基于后订单遍历的以下尝试。我已经手工追踪它,似乎有道理。但是,这是不正确的。谁能帮我理解为什么?

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

1 个答案:

答案 0 :(得分:4)

此基本测试用例的代码将失败,因为它对于以下内容返回true:

    50 
   /
  3
 / \
1   100

问题是您的代码只是将节点与其直接子节点进行比较,而不是与整个子树进行比较。对于以3 为根的子树,它返回true  因为 3&lt; 50 ,你的代码最终返回true,这是错误的。