2015-10-06 56 views
1

在樹上執行二進制搜索時出現堆棧溢出錯誤。我認爲它有一個有效的遞歸終止條件,但我不確定。執行二進制搜索樹搜索時發生堆棧溢出錯誤

TreeNode Find(TreeNode tree, int value) { 
    if((tree.val == value) || tree==null) 
    return tree; 
    else if(value < tree.val) 
    return Find(tree.left, value); 
    else 
    return Find(tree.right, value); 
} 
+0

樹是BST。 – Geekrrr

+2

1)你應該做樹== null || tree.val ==值(所以如果它爲空,它不會崩潰2)你確定你的BST是一棵樹,並沒有以某種方式最終成爲一個循環? (建議在遍歷時打印出值) – Foon

+0

我認爲這是一篇關於StackOverflow站點XD中的錯誤的文章。 – GameDeveloper

回答

0

的錯誤是在其他地方(你的功能幾乎是完全正確的):

你的樹是不均衡的!

你必須做出正確的插入函數。一個簡單的插入函數只會創建一個像樹一樣的鏈表,因爲如果按照「升序」順序插入元素,它們總是隻添加到「左」或右。

堆棧的空間有限,所以如果你有一個平衡樹,它可以有40億個節點,它的最大高度仍然是32.但是如果你的樹即使有很少的節點(1000)也是不平衡的,它可以進入堆棧溢出。

我也建議先檢查空(這不是你的問題,把它作爲一個免費的bug修復)

if(tree==null || tree.val == value) 
+1

我已經嘗試過空的東西,但我猜樹問題畢竟是不平衡的。謝謝 – Geekrrr