二进制搜索树删除两个子
Binary Search Tree Delete two Child
我正试图从带有两个子节点的二进制搜索树中删除一个节点。一切都像我写的那样工作,但删除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运算符之前。
相关文章:
- 高级选择排序 - 在一次迭代中搜索两个元素
- 如何在两个树通用的函数中创建一个参数?
- 我有两棵二叉树.我想在不更改输入树的情况下深度复制两个二叉树的结果
- 在 C++ 中创建两个不同的二叉树时出现分段错误
- 如何在 c++ 中对两个向量进行线性搜索?
- 我正在尝试使用 c++ 编写二叉搜索树,但该程序仅接受 2 个输入并停止
- 查找树中两个节点之间的最大成本边
- 添加一个节点,并在通用树中的两个给定节点之间找到路径成本,其中c 中的儿童列表
- 使用嵌套循环搜索两个向量并查看其属性
- 查找树(不属于任何特定类型的简单连接树)中两个节点之间的路径
- C 通用树按两个标准进行比较
- C++ 从二叉搜索树中删除具有两个子节点的特定节点
- Ram 空间在创建包含 60000 个元素的二叉搜索树时耗尽
- 深度使用两个链接列表的邻接列表的首次搜索C 实现
- 在两个方向上寻找搜索算法 - c / c ++ / awk
- 调试:跟踪(和diffing)同一程序的两个版本的函数调用树
- 在C++上的两个MFC树列表之间拖放
- 恢复两个元素错放的二叉搜索树
- 尝试使二叉搜索树适应两个参数,崩溃(C++)
- 具有两个搜索条件的C++关联容器