繁体   English   中英

目标节点的二进制搜索树删除有两个子节点

[英]Binary Search Tree deletion of target node has two children

这是我的代码,替换是正确的(将目标节点替换为左侧子树中的最大节点),但是替换之后,左侧和右侧子树都消失了。

这是我的代码:

else if (temp->left != NULL && temp->right != NULL)
    {
        minLeaf = temp->left;
        minLeafMa = temp->left;
        parentRight = parent->right;

        while (minLeaf->right != NULL)
        {
            minLeafMa = minLeaf;
            minLeaf = minLeaf->right;
        }
        if (parent->left == temp)
        {
            parent->left = minLeaf;
            minLeafMa->right = NULL;
        }
        else if (parent->right == temp)
        {
            parent->right = minLeaf;
            minLeafMa->right = NULL;
        }
    }

删除节点的正确方法x有两个孩子被找到序successorpredecessorx ,更换x '与价值predecessor的或successor的价值观,并呼吁删除其中一方(无论你使用)。

您在这里使用predecessor 你在做

parent->left = minLeaf;

将父节点的左侧指向叶节点( predecessor节点),导致中间的所有节点都消失了。 相反,您应该做的是

temp->data = minLeaf->data;

并在minLeaf上递归调用delete。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM