문제

I am making a simple program of how to make a binary tree which is the image of given binary tree ..

    #include <stdio.h>
    #include <stdlib.h>

    typedef struct tree { int data; struct tree * left ; struct tree * right} tree;

 int main()  
 {  
    tree * t = malloc(sizeof(tree));

    t->data = 12;
    t->left = malloc(sizeof(tree));
    t->right = malloc(sizeof(tree));

    t->left->data = 13;
    t->right->data = 16;

    t->left->left =NULL;
    t->left->right =NULL;

    t->right->left =NULL;
    t->right->right =NULL;

    inorder(t);

    tree * x = NULL   ;
    reverse(t, &x);

    inorder(x);
    }

// reverse is to create image of binary tree 
    void reverse (tree * t , tree ** r){

    if(t == NULL) return;

    *r = (tree *)malloc(sizeof(tree));

    (*r)->data = t->data;
    (*r)->left = NULL;
    (*r)->right = NULL;

    reverse(t->right,&((*r)->left) );
    reverse(t->left,&((*r)->right));

    }

    void inorder(tree *t)
    { if(t==NULL) return;

       printf("%d ", t->data);
       inorder( t->left);
       inorder( t->right);
    }

This is giving a Segmentation Fault .. Plz help ........

도움이 되었습니까?

해결책

Replace

reverse(t->right,((*r)->left) );
reverse(t->left,((*r)->right));

to

reverse(t->right, &((*r)->left));
reverse(t->left, &((*r)->right));

and try again.

다른 팁

correct program :

#include<stdio.h>
#include<stdlib.h>

typedef struct tree { int data; struct tree * left ; struct tree * right;};// tree;

void reverse (tree * t , tree ** r);
void inorder(tree *t);

int main()  
 {  
    tree * t = (tree *)malloc(sizeof(tree));

    t->data = 12;
    t->left = (tree *)malloc(sizeof(tree));
    t->right = (tree *)malloc(sizeof(tree));

    t->left->data = 13;
    t->right->data = 16;

    t->left->left =NULL;
    t->left->right =NULL;

    t->right->left =NULL;
    t->right->right =NULL;

    inorder(t);

    tree * x = NULL   ;
    reverse(t, &x);

    inorder(x);
    }

// reverse is to create image of binary tree 
    void reverse (tree * t , tree ** r){
    if(t != NULL)printf("%d ", t->data);
    if(t == NULL) return;

    *r = (tree *)malloc(sizeof(tree));

    (*r)->data = t->data;
    (*r)->left = NULL;
    (*r)->right = NULL;

    reverse(t->right,&((*r)->left) );
    reverse(t->left,&((*r)->right));

    }

    void inorder(tree *t)
    { if(t==NULL) return;

       printf("%d ", t->data);
       inorder( t->left);
       inorder( t->right);
    }
reverse(t->right,((*r)->left) );
reverse(t->left,((*r)->right));

should be

reverse(t->right,&((*r)->left) );
reverse(t->left,&((*r)->right));

Right now a tree* is casted as a tree**. You probably had a warning during compilation.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top