2015-10-06 73 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