从二叉搜索树中删除值
Removing a value from a binary search tree
我正在编写一个函数,该函数将从具有给定键关联的二叉搜索树中删除条目。到目前为止,我的代码有这个:
template <typename Item, typename Key = Item>
bool BSTree<Item,Key>::remove(const Key& key) {
bool removed = false;
Node* ptr = root;
if(ptr == NULL)
return removed;
while(key != ptr) {
if(ptr == NULL)
return removed;
else if(key > ptr)
ptr = ptr->right();
else
ptr = ptr->left();
}
removed = true;
Item max = max(ptr);
ptr->data() = max;
Node* prev = ptr;
while (ptr != NULL) {
prev = ptr;
ptr = ptr->right();
}
delete ptr;
if (prev->left() != NULL)
prev = copy(prev->left());
delete prev;
return removed;
}
Copy 是我已经编写的另一个函数,它将使用递归方法将所有值从某个节点传输到树的末尾。我相信这个功能应该可以工作,但我不完全确定,并希望得到一些反馈。
我对函数的最后三行也有问题。在它们中的每一个中,"if"、"delete"和"return"都带有下划线,并给我错误"错误:预期的声明"。我不知道这是怎么回事,非常感谢反馈!
恕
我直言,我看到了几件事。
对于BST移除,你需要一种更好的移植方法,除了你的"副本"之外,至少你应该找到下一个最小的节点,而不是要移除的节点。
PTR->data() = max;我猜你的"data()"方法返回对项目中成员的引用。没有错,只是感觉很奇怪。
您有两个"删除"语句,但您不应该只删除一个项目吗?
在本节中:
while (ptr != NULL) { prev = ptr; ptr = ptr->right(); } delete ptr;
while 退出后,ptr 的值为 NULL,因此您正在删除 NULL,而不是 cool。
相关文章:
- 删除二叉搜索树 (C++) 中的单个元素
- 二叉搜索树 - 使用 Linux 在虚拟机中制作删除功能
- 删除节点方法实际上不会删除二叉搜索树中的节点.C++
- C++ 从二叉搜索树中删除具有两个子节点的特定节点
- 在二进制搜索树中删除节点
- 如何从二进制搜索树中删除节点
- 从C++二进制搜索树中删除一个节点(类而非结构)
- 从基于矢量的二叉搜索树中删除节点的最佳方法
- C++ 通过无序变量删除二叉搜索树
- 二叉搜索树删除 (C++)
- 二叉搜索树查找和删除 [C++]
- 无法从二进制搜索树中删除叶子
- 在C++中为二叉搜索树创建一个删除函数
- 从二叉搜索树中删除值
- 删除二叉搜索树的 fcn
- 如何使用递归删除二叉搜索树中的节点
- 二进制搜索树删除而无需复制
- 很难从我的二进制搜索树中删除一个节点
- 二进制搜索树 - 删除节点,没有指向前任的指针
- 从二进制搜索树中删除只有一个孩子的节点