检查二叉树是否为BST

时间:2015-09-10 21:19:05

标签: java recursion graph tree

我对以下算法感到困惑:

public static boolean checkBST(TreeNode n) {
    if (n == null) {
        return true;
    }

    // Check / recurse left
    if (!checkBST(n.left)) {
        return false;
    }

    // Check current
    if (last_printed != null && n.data <= last_printed) {
        return false;
    }
    last_printed = n.data;

    // Check / recurse right
    if (!checkBST(n.right)) {
        return false;
    }
    return true;
}

我理解有序遍历,并且理解比较当前节点的左子节点以确保它与

2 个答案:

答案 0 :(得分:1)

以与左孩子相同的方式和地点检查正确的孩子。

该算法的工作原理就像通过有序遍历打印每个节点的值,然后检查结果列表是否有序。但是,它不是实际打印,而是在实例变量last_printed中维护在遍历中最近打印的最近打印的值。无论通过遍历和当前节点的路径的进展如何,标记为// Check current的测试都会执行正确的测试,以确定当前节点是否以与树为BST的顺序遍历。

要注意的关键是,在遍历当前节点时,在遍历左子树和右子树之间更新last_printed

答案 1 :(得分:0)

你的左右方法有什么作用?您是否只是想验证您是否拥有二叉搜索树?