Удаление корневого узла 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 ответов

Другие вопросы по тегам