【发布时间】:2013-04-29 05:45:25
【问题描述】:
我之前问过一个类似的问题,但现在我正在寻找为什么这不起作用而不是“帮我修复”。
我必须创建一个如下所示的通用树:
1
/
v
2->3->4
/ /
v v
5-6-7 8-9
我用于类中所有其他方法的搜索方法是
gennode* general::search(int element, gennode *t){
if(t == NULL)
{
return t;
}
if(t->item == element)
{
return t;
}
if(t->siblingList != NULL)
{
return search(element, t->siblingList)
}
return search(element, t->firstChild)
}
其中firstChild是图片中的垂直指针,siblingList是图片中的水平指针。
我的问题是它没有找到 5、6 或 7(2 的孩子)。
递归堆栈看起来像这样(至少我认为它应该在我的脑海中):
search(5, *1)
search(5, *2)
search(5, *3)
search(5, *4)
search(5, *8)
search(5, *9)
return NULL(from *9)
return NULL(from *8)
return NULL(from *3)
search(5, *5)
return(*5) the rest of the way up.
有人知道我在哪里迷路了吗?
【问题讨论】:
-
只是一个猜测,我认为你应该有
else ifs 而不是ifs。 -
顺便说一下,它是一棵二叉树(每个节点有 2 个孩子),但它不是
ordered二叉树。
标签: c++ search recursion tree tree-traversal