Boa noite,
Neste programa, você deve entrar com um inteiro C (C ≤ 1000), indicando o número de casos de teste que virão a seguir. Cada caso de teste é composto por 2 linhas. A primeira linha contém um inteiro N (1 ≤ N ≤ 500) que indica a quantidade de números que deve compor cada árvore e a segunda linha contém N inteiros distintos e não negativos, separados por um espaço em branco. Cada linha de entrada produz 3 linhas de saída. Após construir a árvore binária de busca com os elementos de entrada, deve-se imprimir a mensagem "Case n:", onde n indica o número do caso de teste e faz os três percursos da árvore: prefixo, infixo e posfixo, apresentando cada um deles em uma linha.
Quando executo ele dá o ero de falha de segmentação. Será que alguém pode me ajudar a resolver esse problema ?
O meu código é:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
int node;
struct tree *left;
struct tree *right;
}tree;
tree *raiz;
tree * visita_raiz(tree *ra, tree *r, int valor);
void insere(int valor);
void preordem();
void emordem();
void posordem();
int main(){
int c, n, i, j, a, raiz;
scanf("%d",&c);
for(i=0; i<c; i++){
scanf("%d", &n);
for(j=0; j<n; j++){
scanf("%d", &a);
}
printf("Case %d\n", i+1 );
printf("Pre.:");preordem(raiz);
puts("");
printf("In..:");emordem(raiz);
puts("");
printf("Post:");posordem(raiz);
puts("\n");
raiz = NULL;
}
return 0;
}
tree * visita_raiz(tree *ra, tree *r, int valor){
r = (tree *) malloc(sizeof(tree) *1000);
if(r == NULL){
r->left = NULL;
r->right = NULL;
r->node = valor;
if(ra == NULL){
return r;
}
if(valor < ra->node){
ra->left = r;
}
else{
ra->right = r;
}
return r;
}
if(valor < r->node){
visita_raiz(r,r->left,valor);
}
else{
visita_raiz(r,r->right,valor);
}
}
void insere(int valor){
if(raiz == NULL){
raiz = visita_raiz(raiz,raiz,valor);
}else{
visita_raiz(raiz,raiz,valor);
}
}
void preordem(tree *pNo){
if (pNo != NULL){
printf(" %d", pNo->node);
preordem(pNo->left);
preordem(pNo->right);
}
}
void emordem(tree *pNo){
if (pNo != NULL){
emordem(pNo->left);
printf(" %d", pNo->node);
emordem(pNo->right);
}
}
void posordem(tree *pNo){
if (pNo != NULL){
posordem(pNo->left);
posordem(pNo->right);
printf(" %d", pNo->node);
}
}