首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >二叉树溢出堆栈中的节点搜索

二叉树溢出堆栈中的节点搜索
EN

Stack Overflow用户
提问于 2017-03-28 17:06:34
回答 4查看 4.5K关注 0票数 18

我使用下面的方法来遍历*一棵300,000层的二叉树:

代码语言:javascript
复制
Node* find(int v){
   if(value==v)
      return this;
   else if(right && value<v)
      return right->find(v); 
   else if(left && value>v)
      return left->find(v);
}

然而,由于堆栈溢出,我得到了一个分段错误。关于如何在没有递归函数调用开销的情况下遍历深层树,您有什么想法吗?

*“遍历”我的意思是“搜索具有给定值的节点”,而不是完整的树遍历。

EN

回答 4

Stack Overflow用户

发布于 2017-03-28 17:12:19

一个简单的循环,其中有一个Node*类型的变量,您将其设置为下一个节点,然后再次循环...

不要忘记您要搜索的值不存在的情况!

票数 9
EN

Stack Overflow用户

发布于 2017-03-28 17:09:28

您可以不使用调用堆栈而是使用用户定义的堆栈或类似的东西来实现递归;这可以通过现有的stack模板来完成。方法是有一个while循环,它迭代直到堆栈为空;由于现有的实现使用深度优先搜索,因此可以在here中找到消除递归调用的方法。

票数 7
EN

Stack Overflow用户

发布于 2017-03-29 07:36:12

嗯,它可以以一个额外的局部变量和一些比较为代价来实现尾递归:

代码语言:javascript
复制
Node* find(int v){
  if(value==v)
    return this;
  else if(!right && value<v)
    return NULL;
  else if(!left && value>v)
    return NULL;
  else {
    Node *tmp = NULL;
    if(value<v)
      tmp = right;
    else if(value>v)
      tmp = left;
    return tmp->find(v);
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43065230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档