2
我的AVL树使用整数avlTree[35][5]
的二维阵列中的Java实现的 - 该列表示:AVL树中序遍历不工作
- [0] - 高度左
- [1 ] - 左子
- [2] - 数据
- [3] - 右子
- [4] - 高度右。
我从主程序中调用下面的方法,结果我得到三个节点:最左边的节点两次跟着它的父节点。
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);
}
}
}
我想这是一项家庭作业,但声明方法像'inorderTraversal(** final ** int root)',它将有助于解决问题。至于StackOverflowError - 很可能你在树中有一个循环。 – bestsss 2012-01-13 15:50:35
你不需要最终声明它。类型是int,因此“真实”值不会更改。 – MasterCassim 2012-01-13 15:54:53
@MasterCassim,root代表节点的当前索引,实际上是节点。代码('root = ...')改变了它,因此它被搞砸了。最后是一个提示,因为这是一个功课。没有“真正的”价值,而是对有效改变的节点的索引。 – bestsss 2012-01-13 17:52:15