在c ++中进行树遍历

时间:2013-04-29 03:39:24

标签: 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);
}

我无法弄清楚出了什么问题。它似乎不想找到所有的孩子。例如,如果我有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;

1 个答案:

答案 0 :(得分:4)

看起来您的问题在于搜索 firstChild或siblingList 的逻辑。也就是说,如果你有第一个孩子,你永远不会看到兄弟姐妹。如果您的树是从后到前构建的,它可以解释为什么搜索节点4,而不是搜索节点2.相反,您可能想要询问搜索(element,t-> firstChild)是否成功,如果没有,则通过搜索(element,t-> siblingList):

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