c++ - 二叉搜索树删除两个 child

标签 c++ binary-search-tree

我正在尝试从具有两个子节点的二叉搜索树中删除一个节点。一切都像我写的那样工作,但是在删除 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/

相关文章:

c++ - boost::shared_ptr 标准容器

c - 单行打印中序树遍历的数据,以空格分隔,以换行符结尾

c++ - 创建具有最小深度的二叉搜索树

c++ - getch 相当于汇编语言

c++ - 为什么 std::hex 和 std::oct 标志不起作用?

c++ - 在编译时指定静态和动态大小

c++ - STL排序算法

java - BST 最小 n 个元素显示

c - 打印到 C 中的文件

c++ - 来自预序数组的二叉搜索树