【发布时间】:2014-11-28 03:37:13
【问题描述】:
这不是 BinarySearchTree,只是普通的二叉树。
这是我的 RegularTree 类:
public class RegularTree extends BinaryTree {
public RegularTree() {
super();
}
public void insert(Comparable item) {
if(this.isEmpty()) {
this.setRoot(new TreeNode(item));
return;
}
TreeNode t = this.getRoot();
while(t != null) {
if(t.getLeft() == null)
t.setLeft(new TreeNode(item));
else if(t.getRight() == null)
t.setRight(new TreeNode(item));
else {
if(size(t.getLeft()) > size(t.getRight()))
t = t.getRight();
else
t = t.getLeft();
}
}
}
public int size(TreeNode node) {
return(getSize(node));
}
private int getSize(TreeNode node) {
if (node == null)
return(0);
else
return(getSize(node.getLeft()) + 1 + getSize(node.getRight()));
}
public TreeNode find(Comparable key) {
TreeNode p = this.getRoot();
while(p != null && key.compareTo(p.getValue()) != 0) {
if(key.compareTo(p.getValue()) < 0)
p = p.getLeft();
else
p = p.getRight();
}
return p;
}
public void inorder() {
doInorderTraversal(this.getRoot());
}
private void doInorderTraversal(TreeNode t) {
if(t != null) {
doInorderTraversal(t.getLeft());
System.out.print(t.getValue() + " ");
doInorderTraversal(t.getRight());
}
}
}
这是我的主要方法:
public static void main(String[] args) {
RegularTree tree = new RegularTree();
tree.setRoot(new TreeNode(1));
tree.insert(2);
tree.insert(3);
tree.insert(4);
tree.insert(5);
tree.insert(6);
tree.inorder();
}
这应该会创建一个如下所示的树:
1
/ \
2 3
/ \ /
4 5 6
tree.inorder() 应该对树进行中序遍历,这意味着它应该打印出 4 2 5 1 6 3
但是,当我运行我的 main 方法时,什么也没有发生。我认为我的插入方法有问题,但我不确定是什么问题。
【问题讨论】:
-
可能还有其他问题,但我认为在插入方法中你应该在调用 t.set{Left,Right} 后退出循环
-
我按照你说的做了,树现在正在插入。但是,我的 inorder() 方法打印出以下数字: 4 2 6 1 5 3 出于某种原因,5 和 6 出现在错误的位置。我认为 inorder() 方法没有问题,因为它适用于我的 BinarySearchTree。
标签: java insert binary-tree