Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 二叉搜索树延迟删除_C++_Binary Tree_Binary Search Tree_Lazy Evaluation - Fatal编程技术网

C++ 二叉搜索树延迟删除

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 &

我想在代码中实现延迟删除。我添加了一个布尔值来跟踪节点何时被“删除”/“标记为已删除”。我不确定实际改变的方法是什么。下面是我的删除和插入方法。我试图移除,但没有插入。我确信insert方法必须进行大量检查。请告知

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

您的删除函数看起来应该可以正常工作