这是不 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方法时,没有任何反应。我相信我的插入方法有问题,但我不确定是什么。
答案 0 :(得分:0)
正如我在上面的评论中所提到的,你应该在调用后设置{Left,Right}。我刚刚在您的代码中测试了修改,我得到了4 2 5 1 6 3,如您所愿。
我没有修改代码中的任何其他内容。
我将修改后的版本包括在内:
public class BinaryTree {
TreeNode root;
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 void insert(Comparable item) {
if(this.getRoot() == null) {
this.setRoot(new TreeNode(item));
return;
}
TreeNode t = this.getRoot();
while(t != null) {
if(t.getLeft() == null) {
t.setLeft(new TreeNode(item));
return;
}
else if(t.getRight() == null) {
t.setRight(new TreeNode(item));
return;
}
else {
if(size(t.getLeft()) > size(t.getRight()))
t = t.getRight();
else
t = t.getLeft();
}
}
}
public TreeNode getRoot() {
return root;
}
public void setRoot(TreeNode root) {
this.root = root;
}
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) {
BinaryTree tree = new BinaryTree();
tree.setRoot(new TreeNode(1));
tree.insert(2);
tree.insert(3);
tree.insert(4);
tree.insert(6);
tree.insert(5);
tree.inorder();
}
}