我尝试使用JAVA实现AVL树。我已将此代码作为示例:
http://knowledgejunk.net/2010/11/09/avltree-java-source-code/
但我的有点不同,我想从文件中读取整数并将它们放入AVL树中。 AVL树将按编号逐个构造并平衡每个数字。问题是'0'被放入,当我遍历树(按顺序遍历)时,我没有按顺序得到数字。为了确保程序添加的内容,我已经打印了它输入的每个数字,因此:
FIRST = 9 输入:8 输入:55 输入:44 输入:34 输入:43 输入:76 输入:67 输入:56 输入:65 输入:45 输入:99 输入:88 输入:44 输入:12 输入:21 输入:54 输入:58 输入:77 输入:46 输入:66 输入:23 输入:33 输入:40 输入:17 输入:18 输入:4 输入:5 输入:2 输入:59 输入:90 输入:80 输入:50 输入:60 输入:20 输入:26
我还编写了程序来给我Min / Max值和Inorder遍历,这是我的结果:
最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99 最小值为0.最大值为99
0, 0, 0, 43, 44, 0, 12, 21, 44, 45, 54, 0, 2, 4, 5, 17, 18, 20, 23, 26, 33, 40, 46, 50, 58, 59, 60, 65, 66, 67, 76, 77, 80, 88, 90, 99,
奇怪的是,他们正在以不同的方式排序,我不知道0来自哪里!
这是我的遍历函数代码,并插入:
public Node traverse(Node n){
//INORDER
Node result = new Node();
if(n != null){
if(n.getLeft() != null){
result = traverse(n.getLeft());
}
result = n;
System.out.print(result.getValue() + ", ");
if(n.getRight() != null){
result = traverse(n.getRight());
}
}
return result;
}
public Node insert(int value, Node x){
if(x == null){
x = new Node(value);
}
else if(value < x.getValue()){
x.addLeft(insert(value,x.getLeft()));
if(getHeight(x.getLeft())-getHeight(x.getRight())==2){
if(value < x.getLeft().getValue()){
x = sRotwLeft(x);
}else{
x = dRotwLeft(x);
}
}
}
else if(value > x.getValue()){
x.addRight(insert(value,x.getRight()));
if(getHeight(x.getRight())- getHeight(x.getLeft()) ==2){
if(value > x.getRight().getValue()){
x = sRotwRight(x);
}else{
x = dRotwRight(x);
}
}
}
例如,sRotwRight代表单次旋转,右侧。