c++ - C++中的树遍历

标签 c++ tree traversal

我的作业很简单。我必须使用此结构创建一棵树:

 struct gennode
{
 int item;
 gennode * firstChild;
 gennode * siblingList;
 gennode * prevSibling;
 gennode * parent;
};

我的搜索算法是这样的:

gennode* general::search(int element, gennode *t)
{
  if(t == NULL)
    {
      return t;
    }
  if(t->item == element)
    {
      return t;
    }
  if(t->firstChild != NULL)
    {
      return search(element, t->firstChild);
    }
    return search(element, t->siblingList);
}

我不知道出了什么问题。它似乎不想找到所有的 child 。例如,如果我将 1 作为根,将 2、3、4 作为其子节点,将 5、6、7 作为 2 的子节点,将 8,9 作为 4 的子节点,我将无法通过搜索找到 2 的子节点。

我不知道我的问题出在哪里。

编辑: 下面是 gennode 结构在树中的外观示例,其中 1 为根,2 和 3 为子节点。

gennode * one;
gennode * two;
gennode * three;

one->item = 1;
one->firstChild = two;
one->siblingList = NULL;
one->prevSibling = NULL;
one->parent = NULL;

two->item = 2;
two->firstChild = NULL;
two->siblingList = three;
two->prevSibling = NULL;
two->parent = one;

three->item = 3;
three->firstChild = NULL;
three->siblingList = NULL;
three->prevSibling = two;
three->parent = one;

最佳答案

看起来您的问题出在搜索firstChild OR siblingList 的逻辑上。也就是说,如果你有第一个 child ,你永远不会看 sibling 。如果您的树是从后往前构建的,它可能会解释为什么搜索节点 4 而不是节点 2。相反,您可能想询问 search(element, t->firstChild) 是否成功,如果没有成功,则跳转到搜索(元素,t->siblingList):

if(t->firstChild != NULL)
{
  auto result = search(element, t->firstChild);
  if( result != nullptr )
    return result;
}
return search(element, t->siblingList);

关于c++ - C++中的树遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16270853/

相关文章:

mysql - 简化mysql递归查询

C++ EOF 在 While 循环中从不设置

c++ - 如何从 Windows 控制台读取 utf-8 字符?似乎 ReadConsoleOutputCharacter() 无法处理它们

c++ - 如何调试 Notepad++ DLL 插件?

c++ - 用于可视化二进制搜索树的图形库

r - 我如何制作这样的回归树?

c# - 如何通过 LINQ 展平树?

data-structures - 当两棵树相等时?

java - 如果文件使我的应用程序崩溃则删除文件

c++ - CLion 无法解析类型 std::unordered_map,即使它提示我包含 header 并且编译工作正常