在c ++

时间:2018-07-11 13:35:52

标签: c++ recursion

我要做什么:

我正在尝试删除二进制搜索树中的节点。但是在删除节点之前,我们首先必须搜索该节点是否存在以及我正在检查我的搜索功能,该功能返回找到匹配项的节点的地址。

出了什么问题

执行后,程序将引发异常:Process returned -1073741819 (0xC0000005)而且我相信问题在于语句(*parent) = root;,但我不知道为什么会这样。以及解决方法。

我的代码:

结构定义为:

struct tree{
    int data;
    struct tree *left, *right;
};

搜索功能:

tree * search(tree *root, int value, tree **parent = NULL){

    tree * target = NULL;
    if (!root) return root;
    if (root->data == value) return root;
    if (value < root->data){
        // This returns the matched node
        target = search(root->left, value);
        // and this stores the parent of the matched node
        if (root->left->data == value)
            (*parent) = root;
    } else {
        target = search(root->right, value);
        if (root->right->data == value)
            (*parent) = root;
    }
    return target;
}

删除功能:

void del(tree *root, int value){
    tree * parent = NULL;
    if (!root) return;
    tree *target = search(root, value, &parent);
    // Deletion logic goes here
}

1 个答案:

答案 0 :(得分:1)

简单的原因是*parent=...是一个赋值。这要求parent是有效的(非空)指针。但是,您使用nullptr作为parent的默认值。

您需要修复此功能的设计。这不是唯一的缺陷。