gpt4 book ai didi

java - 检查二叉树是否是 BST

转载 作者:行者123 更新时间:2023-12-01 11:09:45 26 4
gpt4 key购买 nike

我对以下算法感到困惑:

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

我理解中序遍历,并且理解比较当前节点的左子节点以确保它 <= 与 n.data <= last_printed 行中的父节点,但是在这个递归中我们在哪里检查是否右子项大于父项?

最佳答案

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

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

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

关于java - 检查二叉树是否是 BST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32511770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com