Удаление корневого узла BST

Я пытаюсь создать функцию удаления (без использования рекурсии), которая передает значение узла, который я хочу удалить.

Моя текущая проблема заключается в том, что мой деструктор, похоже, вызывает сбой программы (получая ошибку во время выполнения), что, вероятно, связано с тем, что я не удаляю корневой узел должным образом в своей функции удаления.

Код, который я пытаюсь использовать для удаления рута, находится здесь:

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.

Я не очень понимаю, почему это не сможет непрерывно удалять корневой узел (как я сказал, я думаю, что это деструктор, вызывающий сбой программы), но я чувствую, что это могут быть недействительные указатели?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]