【发布时间】:2017-07-18 08:27:16
【问题描述】:
目前,我的二叉搜索树的主要代码如下所示:
public void add(int value) {
overallRoot = add(overallRoot, value);
}
private IntTreeNode add(IntTreeNode root, int value) {
if(root == null){
root = new IntTreeNode(value);
} else if (value <= root.data){
root.left = add(root.left, value);
} else {
root.right = add(root.right, value);
}
return root;
}
public void print() {
printInorder(overallRoot);
System.out.println();
}
private void printInorder(IntTreeNode root) {
if(root != null) {
printInorder(root.left);
System.out.print(root.data + " ");
printInorder(root.right);
}
}
通过按以下顺序插入 42,9,18,55,7,108,4,70,203,15 的值, 借助 print side way 方法,我可以打印出如下所示的树。
203
108
70
55
42
18
15
9
7
4
现在,当我调用 tree.print(),应该按顺序遍历打印,它会打印出 4,7,9,15,18,42,55,70,108,203 但是当我手动进行中序遍历时,我得到 4,7,15,9,18,42,55,70,108,203
我很确定手动进行中序遍历会产生正确的值 但是为什么程序会打印出不同的值呢?
【问题讨论】:
-
您打印左侧节点中的所有内容,然后是数据,然后是右侧节点中的所有内容。如果你有一个正确构造的二叉树,除了按升序打印所有数据值外,它什么也做不了。也就是说,您手动操作不正确。
-
谢谢,我刚刚意识到我 15 是在 18 的左侧分支而不是在 7 的右侧分支;;;
-
是的,它只能分支到
9的右侧或18的左侧,否则树本身会不正确。 -
@jose 你能请完整的课程文件吗?我猜问题出在添加新节点的 add 方法中?
标签: java binary-search-tree tree-traversal inorder