[英]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
有两个孩子被找到序successor
或predecessor
的x
,更换x
'与价值predecessor
的或successor
的价值观,并呼吁删除其中一方(无论你使用)。
您在这里使用predecessor
。 你在做
parent->left = minLeaf;
将父节点的左侧指向叶节点( predecessor
节点),导致中间的所有节点都消失了。 相反,您应该做的是
temp->data = minLeaf->data;
并在minLeaf
上递归调用delete。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.