Ir para conteúdo

natalia_oliveira

Members
  • Total de itens

    3
  • Registro em

  • Última visita

Posts postados por natalia_oliveira


  1. 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);
        }
    }
    
    

     

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.