我尝试构建二叉搜索树构建器方法。但是我觉得我错过了一些东西。我使用inOrderPrint
方法和treeHeigh
方法测试了我的方法。我的方法是如何工作的,根节点是第一个参数。第二个参数是另一个TreeNode node
。此参数是TreeNode
,该方法应将其自身重新排列为二叉搜索树。
我的inOrderPrint正在给我正确的打印,这让我认为我的buildBST
正在运作。但是我的treeHeight
方法没有给我正确的输出。我很确定我的inOrderPrint
和treeHeight
方法已正确创建。
我相信我的buildBST
方法中缺少一些逻辑,但我似乎无法分辨它是什么。
我将root设置为14。
如果我将TreeNodes
的值设置为5,10,3,20,50,25,40,1,2, 18, 100,101
,我会得到这些数字的排序输出,但是treeHeight
,当我期望7时,我得到5的输出。
有人能告诉我哪里出错了吗?
二进制搜索树生成器 代码:
public static void buildBST(TreeNode root, TreeNode node) {
if (root == null) {
node = root;
} else {
// less than root
if (node.data < root.data) {
if (root.left == null) {
root.left = node;
} else {
buildBST(root.left, node);
}
}
// greater than root
if (node.data >= root.data) {
if (root.right == null) {
root.right = node;
} else {
buildBST(root.right, node);
}
}
}
}
inOrderPrint:
public static void inOrderPrint(TreeNode node) {
if (node == null) {
return;
} else {
inOrderPrint(node.left);
System.out.println(node.data);
inOrderPrint(node.right);
}
}
treeHeight:
public static int treeHeight(TreeNode node) {
if (node == null) {
return 0;
} else {
int Ldepth = treeHeight(node.left);
int Rdepth = treeHeight(node.right);
return Math.max(Ldepth, Rdepth) + 1;
}
}
答案 0 :(得分:1)
14
/ \
5 20
/ /\
3 18 50
/ / \
1 25 100
\ \ \
2 40 101
身高是5。
答案 1 :(得分:0)
树的高度绝对是5.使用这个小工具很容易看到