首页 文章

二进制搜索树操作程序错误:分段错误(核心转储)[关闭]

提问于
浏览
0

我正在学习二进制搜索树(BST) . 在BST插入,顺序,前序遍历,后序遍历操作工作正常但删除后,会出现一些问题 . 我从这里学习了BST删除操作:https://gist.github.com/mycodeschool/9465a188248b624afdbf . 我编写了相同的程序,但删除后删除元素,它显示0.有时在插入操作中显示分段错误(核心转储) . 我的代码在这里:(我已经采取了3个案例,其中我们删除的节点有1.No孩子2. 1孩子3. 2孩子)

void Inorder(struct node *tree)
{
    if(tree == NULL)
    {
        return;
    }

    Inorder(tree->left);
    cout<<tree->data<<" ";
    Inorder(tree->right);

}
node* FindMin(struct node *tree)
{
    while(tree->left != NULL)
    {
        tree=tree->left;
    }
    return tree;
}
node* Delete(struct node *tree,int data)
{
    if(tree == NULL)
    {
        return tree;
    }
    else if(tree->data < data)
    {
        tree->right=Delete(tree->right,data);
    }
    else if(tree->data > data)
    {
        tree->left=Delete(tree->left,data);
    }
    else
    {
        if(tree->right==NULL && tree->left == NULL)
        {
            delete tree;
            tree==NULL;
        }
        else if(tree->right==NULL)
        {
            struct node *newnode = tree;
            tree=tree->left;
            delete newnode;
        }
        else if(tree->left == NULL)
        {
            struct node *newnode = tree;
            tree=tree->right;
            delete newnode;
        }
        else
        {
            struct node *newnode = FindMin(tree->right);
            tree->data=newnode->data;
            tree->right=Delete(tree->right,newnode->data);

        }
    }
    return tree;
}

1 回答

  • 0
    delete tree;
            tree==NULL;
    

    在这里,树应该设置为null

    delete tree;
            tree = NULL;
    

相关问题