[英]AVL tree in-order traversal is not working
我的AVL树是在Java中使用二维整数数组avlTree[35][5]
-这些列表示:
我从主程序中调用以下方法,结果得到三个节点:最左边的节点两次,后跟其父节点。
public void inorderTraversal(int root) {
if ((Main.avlTree[root][1] == 0) && (Main.avlTree[root][3] == 0)) {
System.out.println(Main.avlTree[root][2]);
} else {
if (Main.avlTree[root][1] != 0) {
root = Main.avlTree[root][1];
inorderTraversal(root);
}
System.out.println(Main.avlTree[root][2]);
if (Main.avlTree[root][3] != 0) {
root = Main.avlTree[root][3];
inorderTraversal(root);
}
}
}
我写了这个测试程序:
public class AVLTree {
/*
[0] - Height Left
[1] - Left Child
[2] - Data
[3] - Right Child
[4] - Height Right.
*/
private static int[][] avlTree;
public static void main(String[] args) {
avlTree = new int[4][5];
// root (L: 1; R: 3)
avlTree[0][0] = 0;
avlTree[0][1] = 1;
avlTree[0][2] = 3005;
avlTree[0][3] = 2;
avlTree[0][4] = 1;
// parent: root (L: -1; R: -1)
avlTree[1][0] = 0;
avlTree[1][1] = -1;
avlTree[1][2] = 73375;
avlTree[1][3] = -1;
avlTree[1][4] = 0;
// parent: root (L: 3; R: -1)
avlTree[2][0] = 0;
avlTree[2][1] = 3;
avlTree[2][2] = 831954;
avlTree[2][3] = -1;
avlTree[2][4] = 0;
// parent: 2 (L: -1; R: -1)
avlTree[3][0] = 0;
avlTree[3][1] = -1;
avlTree[3][2] = 7485;
avlTree[3][3] = -1;
avlTree[3][4] = 0;
inOrder(0);
}
private static void inOrder(int root) {
if(root == -1) {
// nothing to do
return ;
}
// call function with left child
inOrder( avlTree[root][1] );
// print root
System.out.println( avlTree[root][2]);
// call function with right child
inOrder( avlTree[root][3]);
}
}
和预期的输出:
73375
3005
7485
831954
我的代码也没问题; 在我的测试中效果很好。 也许你的树是假的? 如果没有,我也建议使用-1作为右/左子; 否则会产生误导,因为0可能意味着该节点位于位置0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.