【问题标题】:Search for an element in a n-ary tree recursively递归搜索n叉树中的元素
【发布时间】:2020-03-07 13:18:40
【问题描述】:

我有一个 Tree 类,它有一个嵌套的私有 Node 类。
我编写了一个方法 (Search(T elem)),它搜索作为参数给出的元素是否存在于树中并发送一个布尔值。
但是我的问题是,如果元素存在于我的树的第一个分支中,则此方法仅发送 true,如果不存在,则发送 false。我一定是在递归调用的某个地方弄错了。

例如,在 main 我调用 search('C') 时我得到了错误,尽管我应该得到正确的结果,因为 C 在我树的第二个分支中。
附言: 另外我应该提到,在这个类中,复制运算符和构造函数必须被禁用,除了原始指针(没有向量或智能指针)我不能使用任何东西。
提前谢谢你。

【问题讨论】:

  • 是时候学习如何调试代码了。
  • @ThomasSablik 我调试了它,我知道问题出在我的递归调用上,但我不知道如何解决它............ :)))跨度>
  • "somewhere in recursive calls" 听起来不像您调试了代码并找到了问题的原因。如果您调试过代码并知道问题所在,请将此信息添加到您的问题中。
  • 您的问题与stackoverflow.com/questions/58808623/… 非常相似。如果您了解其他问题,您将了解您的问题。

标签: c++ algorithm recursion search tree


【解决方案1】:

您不应该直接返回children[i]->search(elem);。所以如果在第一个分支中找不到elem,它将返回false,它永远不会超过第一个孩子。只有找到时直接返回那里。否则试试其他孩子。

【讨论】:

  • 抱歉,我不太明白你在说什么。你能更具体一点吗?谢谢
  • 考虑你的树只有根和两个孩子的情况。尝试检查您的代码并考虑当elem 在第二个孩子中时会发生什么。
  • @Mohammadreza if (children[i]) return children[i]->search(elem); 检查第一个孩子并退出循环。它不会检查其他孩子。
  • @ThomasSablik 但是递归调用方法不是在所有孩子中进行搜索吗????你是说return这个方法有问题吗
  • @Mohammadreza 在您的原始代码中将if (children[i]) return children[i]->search(elem); 更改为if (children[i] && children[i]->search(elem)) return true;
猜你喜欢
  • 2014-01-02
  • 2021-07-03
  • 2019-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多