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

C++ c+中的树遍历+;,c++,tree,traversal,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;

我有一个任务很简单。我必须使用此结构创建一棵树:

 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 * 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;
我不知道我的问题在哪里

编辑: 下面是一个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;

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


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


兄弟姐妹名单指的是什么?如中所示,单个节点如何成为列表?如果您有一个子节点列表,那么将它们存储在向量中而不是单个节点中不是更好吗?“兄弟姐妹列表”是下一个兄弟姐妹,而“上一个兄弟姐妹”是上一个兄弟姐妹吗?这一点我不清楚。请以您的示例为例,给出值为2I的节点的gennode成员值。我编辑了原始帖子以包含示例。siblingList指的是什么?如中所示,单个节点如何成为列表?如果您有一个子节点列表,那么将它们存储在向量中而不是单个节点中不是更好吗?“兄弟姐妹列表”是下一个兄弟姐妹,而“上一个兄弟姐妹”是上一个兄弟姐妹吗?这对我来说是不清楚的。对于你的例子,请给出值为2I的节点的gennode成员值。我编辑了原始帖子以包含一个例子。我根本不理解这段代码。如果通过同级找到空指针,它将中断。我只是糊涂了。我根本不懂这个代码。如果通过同级找到空指针,它将中断。我只是糊涂了。