我要做什么:
我正在尝试删除二进制搜索树中的节点。但是在删除节点之前,我们首先必须搜索该节点是否存在以及我正在检查我的搜索功能,该功能返回找到匹配项的节点的地址。
出了什么问题
执行后,程序将引发异常: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
}
答案 0 :(得分:1)
简单的原因是*parent=...
是一个赋值。这要求parent
是有效的(非空)指针。但是,您使用nullptr
作为parent
的默认值。
您需要修复此功能的设计。这不是唯一的缺陷。