Я попытался реализовать вставку в дерево AVL, но при попытке запустить его возникает ошибка сегментации. - PullRequest
0 голосов
/ 09 октября 2018

Когда я пытаюсь запустить мою программу, ввод занимает 2 или 3 шага, а затем резко останавливается, даже если я нажимаю Y для ввода большего количества элементов. Это скриншот моего вывода: enter image description here Вот мой сегмент кода, lc обозначает левого потомка, rc обозначает правого потомка, а ht обозначает высоту дерева:

void inorder(struct node *root) //print inorder
{
    if(root->lc!=NULL)
        inorder(root->lc);
    printf("%d ",root->data);
    if(root->rc!=NULL)
        inorder(root->rc);
}
struct node *insert(struct node *T,int x) //code for insertion of a node
{
    if(T==NULL)
    {
        T=(struct node*)malloc(sizeof(struct node));
        T->data=x;
        T->lc=NULL;
        T->rc=NULL;
    }
    else
    {
        if(x > T->data)        
        {
            T->rc=insert(T->rc,x);
            if(BF(T)==-2)
                if(x>T->rc->data)
                    T=RR(T);
                else
                    T=RL(T);
        }
        else
        {
            if(x<T->data)
            {
                T->lc=insert(T->lc,x);
                if(BF(T)==2)
                    if(x < T->lc->data)
                        T=LL(T);
                    else
                        T=LR(T);
            }
        }
        T->ht=height(T);
        return(T);
    }
}

int main()
{
    struct node *root=NULL;
    int ele;
    char ch;
    do
    {
        printf("\n Enter the value to be inserted in AVL: ");
        scanf("%d",&ele);
        root=insert(root,ele);
        printf("\n Want to insert more elements? (y/n): ");
        getchar();
        scanf("%c",&ch);
    }while(ch=='y' || ch=='Y');
    printf("\n Press any key to print inorder traversal: ");
    getchar();
    inorder(root);
    return 0;
}
...