二叉平衡树的指针问题

发布于 2022-09-03 00:37:40 字数 1304 浏览 13 评论 0

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

二叉平衡树

如图,如果我想要删除14结点

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

当我找到14结点时, T=T->LeftChild; T变为它的左儿子13,TmpCell仍然是14结点,然后我free了TmpCell,就等于释放了14结点,14结点的父节点并没有链接13结点,但是为什么遍历时13结点也能输出。虽然这么写满足了需求,但是这里不太懂,希望解答下,谢谢。

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

还有这句代码的效率比较低,请问怎么改正。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

闻呓 2022-09-10 00:37:40
当你删除节点14后,程序返回,程序并没有结束,程序返回到这里

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

此时,T 指向节点10 ,Delete函数返回指向13的指针

关于效率问题
可以用循环代替递归,寻找目标节点
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文