我试着用一个递归函数用一个二叉树(不,它不是二叉树,只是一个二叉树)做一个搜索方法。如果数据在二叉树上,我希望它返回节点,如果不是,我希望它返回一个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函数:
search(root, 6);
时,它说它返回一个NULL
值,尽管我已经将一个6
数字推到了二叉树中(search函数也停在return node;
行,所以我假设该函数返回一个NULL
)我在here中看到了一个关于二叉树的教程,使用并修改了其中的一些代码,但它仍然是一样的我在这里拼命寻找帮助:(
最佳答案
您的函数将始终返回NULL
,除非顶部节点包含键。您的函数不会对其递归调用的结果执行任何操作;事实上,控制流可能会在不命中return
语句的情况下从它的末尾“脱落”。
您应该检查递归调用的返回值,并在适当时传递这些值:
if (node == NULL)
return NULL;
else if (node->number == key)
return node;
else {
data *left = search(node->left, key);
return left? left: search(node->right, key);
}
注意“三元运算符”(if then else表达式)
?:
。关于c - C:二叉树搜索方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10602265/