二叉搜索树延迟删除
Binary search tree lazy deletion
我想在我的代码中实现延迟删除。我添加了一个布尔值来跟踪节点何时被"删除"/标记为已删除。我不确定实际更改什么方法。这是我的删除和插入方法。我尝试删除,但没有插入。我确信插入方法必须进行大量检查。请指教。
template<class Comparable>
bool search_tree<Comparable>::remove(treeNode<Comparable> * &root,
const Comparable &x) {
if (root == NULL)
return false;
if (x < root->data)
return remove(root->lftChild, x);
if (root->data < x)
return remove(root->rtChild, x);
root->deleted = true;
return true;
}
template<class Comparable>
bool search_tree<Comparable>::insert(treeNode<Comparable> * &root,
const Comparable &x) {
if (root == NULL) {
root = new treeNode<Comparable>(x, NULL, NULL);
return true;
} else if (x < root->data)
return insert(root->lftChild, x);
else if (root->data < x)
return insert(root->rtChild, x);
return false;
}
您的插入函数应该按原样工作,除非 x 等于已删除的项目,否则它不会入。如果 x 等于根>数据,则需要确保删除为 false。
您的删除功能看起来应该可以正常工作。
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 如何仅为一个函数添加延迟
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么示例代码访问IUnknown中已删除的内存
- 文件删除(使用取消链接)与释放所有磁盘空间之间的延迟
- 在C++中实现哈希表(插入和延迟删除)
- 二叉搜索树延迟删除
- 如何延迟shared_ptr的删除操作