我试着用一个递归函数用一个二叉树(不,它不是二叉树,只是一个二叉树)做一个搜索方法。如果数据在二叉树上,我希望它返回节点,如果不是,我希望它返回一个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/

10-12 15:01