二进制搜索树延迟删除

时间:2013-11-11 20:09:51

标签: c++ binary-tree binary-search-tree lazy-evaluation

我想在我的代码中实现延迟删除。我添加了一个布尔值来跟踪节点被“删除”/标记删除的时间。我不确定实际改变的方法。这是我的删除和插入方法。我试图删除,但不是插入。我确信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;
}

1 个答案:

答案 0 :(得分:0)

您的插入函数应该按原样工作,除非x等于已删除的项目,否则它不会被插入。如果x等于root-&gt;数据,则需要确保删除为false。

你的删除功能看起来应该可以正常工作。