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