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成员值。我编辑了原始帖子以包含一个例子。我根本不理解这段代码。如果通过同级找到空指针,它将中断。我只是糊涂了。我根本不懂这个代码。如果通过同级找到空指针,它将中断。我只是糊涂了。