Я пытаюсь создать функцию удаления (без использования рекурсии), которая передает значение узла, который я хочу удалить.
Моя текущая проблема заключается в том, что мой деструктор, похоже, вызывает сбой программы (получая ошибку во время выполнения), что, вероятно, связано с тем, что я не удаляю корневой узел должным образом в своей функции удаления.
Код, который я пытаюсь использовать для удаления рута, находится здесь:
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 само по себе является значением, передаваемым функции удаления (той, которую я хочу удалить). Когда я разыменовываю такие вещи, как root _-> val, я получаю доступ к val в моем классе BST.
Я не очень понимаю, почему это не сможет непрерывно удалять корневой узел (как я сказал, я думаю, что это деструктор, вызывающий сбой программы), но я чувствую, что это могут быть недействительные указатели?
Задача ещё не решена.
Других решений пока нет …