2010-10-31 106 views
2

我試圖通過首先構建一個數組(inorder)來平衡BST,然後從我的數組中重建整個樹。從一個二叉搜索樹遞歸構建數組時,StackOverflowError

我:

public void toArray(E[] a) { 
    toArray(root, a, 0); 
} 

/* 
    * Adds all elements from the tree rooted at n in inorder to the array a 
    * starting at a[index]. 
    * Returns the index of the last inserted element + 1 (the first empty 
    * position in a). 
    */ 
private int toArray(BinaryNode<E> node, E[] a, int index) { 
    if (node.left != null) { 
    index = toArray(node, a, index); 
    } 

    a[index] = node.element; 
    index++; 

    if (node.right != null) { 
    index = toArray(node, a, index); 
    } 

    return index; 
} 

和:

bst.toArray(b); 

我希望這將建立序的數組。但我得到StackOverflowError。據我所知,這可能是由於無限遞歸,但我真的看不到它。

錯誤發生在這條線:

index = toArray(node, a, index); 

讚賞任何幫助。

回答

5
index = toArray(node, a, index); 

你想寫node.leftnode.right

+0

關閉原因=)抱歉浪費你的時間。謝謝! – evading 2010-10-31 13:00:33

+0

@refuser - 如果這回答你的問題,「接受」它。 – 2010-10-31 13:08:07

+0

想過我了嗎?我點擊了複選標記,並且說等了七分鐘,所以我再次點擊它,它變成綠色。我錯過了什麼? – evading 2010-10-31 13:52:18

1

那就是:

if (node.left != null) { 
    index = toArray(node, a, index); 
} 

你可能想要做index(增量爲例)的東西或與節點(例如,node = node.left)(我沒有調查你的算法,只是一般建議)。