私は削除のためのbst関数を作成しようとしていました。しかし、これは何時間も苦労していますが、セグメント化エラーの原因を突き止めることはできませんでした。誰かが私を見つけて助けてくれますか?ここに私のコードです。C++バイナリ検索ツリーでセグメント化エラーが削除されます
bool Set::remove(const ItemType & item) {
return removeHelper(root, item);
}
bool Set::removeHelper(Node *root, const ItemType &item) {
if (root == NULL) {//check if root is null
return false;
}
else if (item == root->data) {//check if item equals to root
Node *temp = root;
if (root->right == NULL && root->left == NULL) {//check if roots equal to null
root = NULL;
}
else if (root->right == NULL) {//check if root equals to null
root = root->left;
}
else if (root->left == NULL) {//check if root equals to null
root = root->right;
}
else {
Node *p = root; //it is like parent root
temp = temp->right;
while (temp->left != NULL) {//check if temp root equals to null
p = temp;
temp = p->left;
}
if (p == root) {//check if root equals to parent
p->right = temp->right;
}
else {
p->left = temp->right;
}
root->data = temp->data;
}
delete temp;//delete temp node
return true;
}
else if (item < root->data)
removeHelper(root->left, item);//call recursive delete function
else if (item > root->data)
removeHelper(root->right, item);//call recursive delete function
return false;
にすべて
root
の参照を変更するこんにちは、はい、それはです。私は編集しました。ありがとう! –