我正在尝试从具有两个子节点的二叉搜索树中删除一个节点。一切都像我写的那样工作,但是在删除 min
之后,我在尝试打印树时遇到了问题。我的算法有什么问题吗?
void BST::DeleteTwoChild(Node * Current, Node * Parent)
{
// Declare min
Node * min = Current;
Node * minParent = NULL;
// Loop until minimum value is found
while (min->Right != nullptr)
{
minParent = min;
min = min->Right;
}
while (min->Left != nullptr)
{
minParent = min;
min = min->Left;
}
// Copy contents of min to Current (Node info being deleted)
Current->Data = min->Data;
Current->Frequency = min->Frequency;
// Delete the duplicate (min)
delete min;
}
编辑:
解决方案是在 delete
minParent->Left = nullptr;
最佳答案
如果任何其他节点仍指向它,则不应删除 min。通常您会先将该指针设置为 NULL。
关于c++ - 二叉搜索树删除两个 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34258663/