使用free(N)删除BST中的节点

时间:2011-03-30 16:20:37

标签: c binary-search-tree free

我正在编写一个二叉搜索树,我在找到一种有效删除节点的方法时遇到了一些麻烦。

我有这段代码:

struct node* deleteNode(int i, struct node *N)

{
    if (N==NULL)
    {
        return NULL;
    }
    else if (i<N->value)
    {
        N->size--;
        N->lChild=deleteNode(i,N->lChild);
    }
    else if (i>N->value)
    {
        N->size--;
        N->rChild=deleteNode(i,N->rChild);
    }
    else if (N->lChild==NULL)
    {
        return N->rChild;
    }
    else if (N->rChild==NULL)
    {
        return N->lChild;
    }
    else
    {
        N->size--;
        N->value=findMin(N->rChild);
        N->rChild=deleteNode(N->value,N->rChild);
    }
    return N;
}

N是一个节点结构,有5个字段:value,lChild,rChild,size,height。 事实上,我在这里做的是让树不要指向我想要删除的节点,但是当我试图放置类似的东西时:

    else if (N->rChild==NULL)
    {
        free(N);
        N=NULL;
        return N->lChild;
    }

或者每个类似的代码,它都不起作用。有人能指出我正确的方向吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

首先,你说N = NULL,然后调用N&gt; lchild N为空并指向无,那么你期望得到lchild值?

由于这是作业,我不会给出直接答案,但提示。

要删除节点,请检查它是否有子节点,如果它没有释放它并删除对它的引用,例如parents child ptr。 如果它有1个子交换ptr指向要与子节点删除的节点并释放节点。如果您还有2个孩子,则同样适用。