二进制搜索树操作程序错误:分割故障(核心倾倒)

Binary Search Tree operations program error : Segmentation fault (core dumped)

本文关键字:核心 故障 分割 操作 搜索树 程序 错误 二进制      更新时间:2023-10-16

我正在学习二进制搜索树(BST(。在BST插入中,有序,预订遍历,后订单遍历操作正常,但是在删除后,会出现一些问题。我从这里学习了BST删除操作:https://gist.github.com/mycodeschool/9465A188248B624AFDBF。我已经编写了相同的程序,但是在删除代替删除元素后,它显示了0。有时在插入操作中显示分割故障(核心倾倒(。我的代码在这里:(我服用了3个案例,其中我们要删除的节点有1.1.1。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;
}
        delete tree;
        tree==NULL;

在这里,应将树设置为null

        delete tree;
        tree = NULL;