二进制搜索树删除两个子

Binary Search Tree Delete two Child

本文关键字:两个 搜索树 删除 二进制      更新时间:2023-10-16

我正试图从带有两个子节点的二进制搜索树中删除一个节点。一切都像我写的那样工作,但删除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。

很难说,因为您没有提供MCVE,但尝试添加

minParent->Left = nullptr;

在CCD_ 4运算符之前。