Deleting the root node of a BST

112 Views Asked by At

I'm trying to make a remove function (without the use of recursion), that passes in the value of the node I want to remove.

My current problem is that my destructor seems to be making the program crash (getting a runtime error), which is probably because I'm not deleting the root node properly in my remove function.

The code I'm trying to use to remove the root is here:

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;
    }
}
}

In my code, just using val by itself is the value being passed in to the remove function (the one I want to remove). When I dereference things like root_->val, I'm accessing the val in my BST class.

I don't really understand why this wouldn't be able to continuously delete the root node (like I said I think it's the destructor making the program crash), but I feel like it could be invalid pointers?

0

There are 0 best solutions below