我试图创建一个删除函数(不使用递归),它传入我想要删除的节点的值。
我当前的问题是我的析构函数似乎使程序崩溃(得到运行时错误),这可能是因为我没有在删除函数中正确删除根节点。
我试图用来移除root的代码在这里:
bool BST::remove_root (int val)
{
if (val == root_->val)
{
if (root_->left == NULL && root_->right != NULL)
{
Node* temp = root_->right;
delete root_;
root_ = NULL;
size_--;
root_ = temp;
return true;
}
else if (root_->right == NULL && root_->left != NULL)
{
Node* temp = root_->left;
delete root_;
root_ = NULL;
size_--;
root_ = temp;
return true;
}
else
{
Node *curr = root_->right, *child = root_->left;
delete root_;
root_ = NULL;
size_--;
root_ = curr;
Node* temp = curr;
while (temp->left != NULL)
temp = temp->left;
temp->left = child;
return true;
}
}
}
在我的代码中,只使用val本身就是传递给remove函数的值(我要删除的那个)。当我取消引用root _-> val之类的内容时,我会访问我的BST类中的val。
我真的不明白为什么这不能连续删除根节点(就像我说我认为它是导致程序崩溃的析构函数),但我觉得它可能是无效的指针?