在二进制搜索树中执行搜索时出现堆栈溢出错误

时间:2015-10-06 15:24:15

标签: stack-overflow binary-search-tree

在树上执行二进制搜索时出现堆栈溢出错误。我认为它有一个有效的递归终止条件,但我不确定。

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); 
}

1 个答案:

答案 0 :(得分:0)

错误发生在其他地方(你的功能几乎完全正确):

你的树不平衡!

你需要做的是插入功能。一个简单的插入函数只会创建一个像树一样的链表,因为如果你在&#34;升序&#34;中插入元素。订单,它们总是只添加到&#34; left&#34;或者向右。

堆栈的空间有限,所以如果你有一个平衡的树,它可以有4亿个节点,它的最大高度仍然是32个。但是如果你的树是不平衡的,即使是很少的节点(1000)它也可以进入堆栈溢出。

我还建议首先检查null(这不是你的问题,把它作为一个免费的bug修复)

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