BST删除功能中的点错误

时间:2016-07-01 08:52:08

标签: c data-structures binary-search-tree

Delete(key, T){
    BstTree TmpCell; //one tree node
    if(T == NULL)
        return Not Found;
    else if(key < T->data)
        T->LeftChild = Delete(key, T->LeftChild);
    else if(key > T->data)
        T->RightChild = Delete(key, T->RightChild);
    else if(T->LeftChild&& T->RightChild){
        TmpCell = Findmin(T->RightChild);
        T->data = TmpCell->data;
        T->RightChild = Delete(T->data, T->RightChild);
    }
    else{
        TmpCell = T;
        if(T->LeftChild = NULL) T= T->RightChild; 
        if(T->RightChild = NULL) T=T->LeftChild;
        free(TmpCell); 
    }
    return T; 
}

BSTTREE

我在“C中的数据结构和算法分析”中找到了代码。

如果我想删除14

 else{
        TmpCell = T;
        if(T->LeftChild = NULL) T = T->RightChild; 
        if(T->RightChild = NULL) T =T->LeftChild;
        free(TmpCell); 
     }

在我找到14之后,T(14)移动到T的LeftChild(13),但是TmpCell仍然指向14,然后我释放它。但是当我输出Tree时,它输出13,那么13如何连接到14的父级?

1 个答案:

答案 0 :(得分:1)

Delete的返回值被分配给某个东西时,就会出现“连接”部分,即在行中

        T->LeftChild = Delete(key, T->LeftChild);

        T->RightChild = Delete(key, T->RightChild);

在函数本身及其调用者中:

myTree = Delete(x, myTree);

(这就是你应该怎么称呼它。)