C++ 二叉搜索树延迟删除
我想在代码中实现延迟删除。我添加了一个布尔值来跟踪节点何时被“删除”/“标记为已删除”。我不确定实际改变的方法是什么。下面是我的删除和插入方法。我试图移除,但没有插入。我确信insert方法必须进行大量检查。请告知C++ 二叉搜索树延迟删除,c++,binary-tree,binary-search-tree,lazy-evaluation,C++,Binary Tree,Binary Search Tree,Lazy Evaluation,我想在代码中实现延迟删除。我添加了一个布尔值来跟踪节点何时被“删除”/“标记为已删除”。我不确定实际改变的方法是什么。下面是我的删除和插入方法。我试图移除,但没有插入。我确信insert方法必须进行大量检查。请告知 template<class Comparable> bool search_tree<Comparable>::remove(treeNode<Comparable> * &root, const Comparable &
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;
}
模板
bool search_tree::remove(treeNode*&root),
常数(可比和x){
if(root==NULL)
返回false;
如果(xdata)
返回删除(root->lftChild,x);
如果(根->数据rtChild,x);
root->deleted=true;
返回true;
}
模板
布尔搜索树::插入(树节点*&根节点),
常数(可比和x){
if(root==NULL){
root=新树节点(x,NULL,NULL);
返回true;
}else if(xdata)
返回insert(root->lftChild,x);
else if(根->数据rtChild,x);
返回false;
}
插入函数应按原样工作,除非x等于已删除的项目,否则它将无法插入。如果x等于root->data,则需要确保deleted为false
您的删除函数看起来应该可以正常工作