【问题标题】:Checking if binary tree is a BST检查二叉树是否是 BST
【发布时间】:2015-09-10 21:19:05
【问题描述】:

我对以下算法感到困惑:

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

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

【问题讨论】:

    标签: java recursion graph tree


    【解决方案1】:

    右孩子的检查方式和位置与左孩子相同。

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

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

    【讨论】:

      【解决方案2】:

      你的左右方法是做什么的?你只是想验证你有一个二叉搜索树吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-23
        • 2018-06-30
        • 2018-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多