我想用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;
};信息函数:
char
info (Tree* t)
{
    return t->n;
}tree_null函数:
int
tree_null (Tree* t)
{
    return (t == NULL);
}发布于 2015-10-16 03:02:15
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;
}https://stackoverflow.com/questions/33156377
复制相似问题