【发布时间】:2012-05-15 13:53:49
【问题描述】:
我正在尝试使用递归函数使用二叉树(不,它不是二叉搜索树,只是二叉树)来制作搜索方法。如果数据在二叉树上,我希望它返回节点,如果不是,我希望它返回一个NULL 值。我已经制作了搜索功能,并且它完美地完成了它的工作。但问题是,该函数似乎不会返回节点。
这是二叉树的struct:
struct data
{
int number;
struct data *left, *right;
}*root = NULL;
这就是我说的搜索功能:
data* search(struct data *node, int key)
{
if(node == NULL)
return NULL;
else
{
printf("\n%d %d -", node->number, key);
if(node->number== key)
return node;
search(node->left, key);
search(node->right, key);
}
}
当我像这样调用搜索函数时:search(root, 6);,它说它返回了一个 NULL 值,尽管我已将一个 6 数字推入二叉树(并且搜索函数在return node; 也行,所以我假设该函数返回 NULL。)
我在here 中看到了二叉树的教程,使用并更改了其中的一些代码,但它仍然是一样的。我在这里拼命寻求帮助:(
【问题讨论】:
-
C 还是 C++?完全不同的野兽。
-
当某些调用返回一个非空指针时,该值会发生什么?
-
@KonradRudolph:实际上是 C,但我使用的是 C++ 编译器,所以,我认为这不会有问题。 .
-
@Jerry Coffin:我不确定我的回答是否正确,但是当它没有返回非空值时,我想将另一个数据推送到树。
-
@aquatorrent 这可能不是问题,但这不是我问的原因。相反,一个好的 C++ 解决方案看起来会完全不同,因此好的建议应该考虑到这一点。