我对以下算法感到困惑:
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;
}
我理解有序遍历,并且理解比较当前节点的左子节点以确保它与
答案 0 :(得分:1)
以与左孩子相同的方式和地点检查正确的孩子。
该算法的工作原理就像通过有序遍历打印每个节点的值,然后检查结果列表是否有序。但是,它不是实际打印,而是在实例变量last_printed
中维护在遍历中最近打印的最近打印的值。无论通过遍历和当前节点的路径的进展如何,标记为// Check current
的测试都会执行正确的测试,以确定当前节点是否以与树为BST的顺序遍历。
要注意的关键是,在遍历当前节点时,在遍历左子树和右子树之间更新last_printed
。
答案 1 :(得分:0)
你的左右方法有什么作用?您是否只是想验证您是否拥有二叉搜索树?