【发布时间】:2012-02-09 18:27:10
【问题描述】:
我的 AVL 树是在 Java 中使用二维整数数组avlTree[35][5] 实现的 - 列表示:
- [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 - 很可能你在树中有一个循环。 -
您不需要将其声明为最终版本。类型是 int 因此“真实”值不会改变。
-
@MasterCassim,root代表节点的当前索引,实际上是节点。代码 (
root = ...) 改变了它,因此它被搞砸了。决赛是一个小费,因为这是一个家庭作业。没有“真正的”价值,而是一个有效改变的节点的索引。 -
是的;我现在看到了; ) 如果第一个和第二个 if 在 else 的情况下执行,就会有问题。