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

时间:2015-10-15 18:58:09

标签: c binary-tree

我想在C中实现一个递归函数,其中返回值是二叉树中节点的父节点。作为参数,我有t,即所讨论的树和字符n,即节点的名称。我想找到这个节点的父节点。我试图这样做,但它没有用。

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检查树是否为空。这是树结构:

struct tree
{
    struct tree *lft, *rgt; //left node and right node
    char n;
};

info function:

char
info (Tree* t)
{
    return t->n;
}

tree_null函数:

int
tree_null (Tree* t)
{
    return (t == NULL);
}

1 个答案:

答案 0 :(得分:1)

if (info(t->lft) || info(t->rgt) == n)
           return t;

这是问题所在。 ||运算符的两边是彼此独立的,所以这不等于

if (info(t->lft) == n || info(t->rgt) == n)

这就是你想要的。

您必须在||

的两侧进行相等性测试
if (info(t->lft) == n || info(t->rgt) == n)
           return t;

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

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

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

它将类似于:

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;
}