首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C:二叉树搜索方法

C:二叉树搜索方法
EN

Stack Overflow用户
提问于 2012-05-15 21:53:49
回答 3查看 10.1K关注 0票数 1

我正在尝试使用递归函数使用二叉树(不,它不是二叉树,只是二叉树)来创建一种搜索方法。如果数据在二叉树上,我希望它返回节点,如果不在二叉树上,我希望它返回一个NULL值。我已经实现了搜索功能,它正在完美地完成它的工作。但问题是,该函数似乎不会返回节点。

下面是二叉树的struct

代码语言:javascript
复制
struct data
{
    int number;
    struct data *left, *right;
}*root = NULL;

这就是我所说的搜索功能:

代码语言:javascript
复制
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中看过二叉树的教程,使用并修改了其中的一些代码,但它仍然是一样的。我正拼命地在这里寻求帮助:

EN

回答 3

Stack Overflow用户

发布于 2012-05-15 21:59:35

除非您使用search的返回值,否则它不会返回搜索到的节点

将其更改为如下所示。

代码语言:javascript
复制
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;
    struct data *tmp;
    tmp = search(node->left, key);
    /* node found ? */
    if (tmp)
        return tmp;
    tmp = search(node->right, key);
    /* node found ? */
    if (tmp)
        return tmp;
  }
  /* search didn't find anything */
  return NULL;
}
票数 1
EN

Stack Overflow用户

发布于 2012-05-15 22:00:27

实际上,您永远不会从搜索的递归调用中返回结果。

您需要检查这些调用的返回值,如果它们找到了节点,则返回它

代码语言:javascript
复制
data* search(struct data *node, int key)
{
    data* found = NULL;

    if(node == NULL)
        return NULL;

    printf("\n%d %d -", node->number, key);

    if(node->number== key)
        return node;

    found = search(node->left, key);
    if (found)
        return found;

    found = search(node->right, key);
    if (found)
       return found;

    return NULL;
}
票数 1
EN

Stack Overflow用户

发布于 2012-05-15 22:08:07

有一种更简单、更有效的方法来创建二叉树,那就是简单地使用向量/数组。

I是访问你的向量的整数。向右转,i=i*2。向左转,i=i*2+1。它们永远不会共享同一个点,假设每个点都是均匀分布的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10602265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档