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.
문제
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.