删除BST的根节点

时间:2018-04-01 17:36:14

标签: c++ binary-search-tree nodes root-node

我试图创建一个删除函数(不使用递归),它传入我想要删除的节点的值。

我当前的问题是我的析构函数似乎使程序崩溃(得到运行时错误),这可能是因为我没有在删除函数中正确删除根节点。

我试图用来移除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。

我真的不明白为什么这不能连续删除根节点(就像我说我认为它是导致程序崩溃的析构函数),但我觉得它可能是无效的指针?

0 个答案:

没有答案