首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C中返回二叉树中节点的父节点

在C中返回二叉树中节点的父节点
EN

Stack Overflow用户
提问于 2015-10-16 02:58:09
回答 1查看 1.2K关注 0票数 0

我想用C实现一个递归函数,其中返回值是二叉树中节点的父节点。作为参数,我有t (有问题的树)和字符n (节点名称)。我想要找到这个节点的父节点。我试着这样做,但没有起作用。

代码语言:javascript
运行
复制
Tree*
tree_par (Tree* t, char n)
{
    if (!tree_null(t))
    {
        if (info(t->lft) || info(t->rgt) == n)
           return t;

        else
        {
            tree_par(t->lft, n);
            tree_par(t->rgt, n);
        }
    }
}

函数info返回节点的名称,函数tree_null检查树是否为空。下面是树形结构:

代码语言:javascript
运行
复制
struct tree
{
    struct tree *lft, *rgt; //left node and right node
    char n;
};

信息函数:

代码语言:javascript
运行
复制
char
info (Tree* t)
{
    return t->n;
}

tree_null函数:

代码语言:javascript
运行
复制
int
tree_null (Tree* t)
{
    return (t == NULL);
}
EN

回答 1

Stack Overflow用户

发布于 2015-10-16 03:02:15

代码语言:javascript
运行
复制
if (info(t->lft) || info(t->rgt) == n)
           return t;

问题就在这里。||运算符的两端是相互独立的,因此这不等于

代码语言:javascript
运行
复制
if (info(t->lft) == n || info(t->rgt) == n)

这就是你想要的。

您必须在||的两端进行相等性测试

代码语言:javascript
运行
复制
if (info(t->lft) == n || info(t->rgt) == n)
           return t;

编辑,也请注意,如果你这样做

代码语言:javascript
运行
复制
 else
        {
            tree_par(t->lft, n);
            tree_par(t->rgt, n);
        }

您实际上丢弃了递归函数调用的返回值,您需要更改它以检查两个递归调用中的哪一个(如果有的话)是成功的;此外,不要忘记为空树添加类似return NULL的内容,否则将得到未定义的返回值。

它将类似于以下内容:

代码语言:javascript
运行
复制
Tree* tree_par (Tree* t, char n)
{
    if (!tree_null(t))
    {
        if ((info(t->lft) == n) || (info(t->rgt) == n))
           return t;
        else
        {
            Tree tt*;
            tt=tree_par(t->lft, n);
            if (tt==NULL)
                tt= tree_par(t->rgt, n);
            return tt;
        }
    }
    else
       return NULL;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33156377

复制
相关文章

相似问题

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