Arvores em C - problemas com Ponteiros

2 respostas
douglaskd

pessoal, estou com problemas com ponteiros, na verdade são mais dúvidas de como usá-los =)

ele imprime a préOrdem com problemas:

#include "stdio.h"

//Estrutura da árvore
typedef struct no {
       int valor;
       struct no *pdir;
       struct no *pesq;
} Arvore;

void Inserir(struct no *pRaiz){   
       
//Ler valor do elemento a esquerda, caso seja 0, este nao terá filhos.  
         int valor;        
         printf("Digite o valor do Filho do Elemento %i a Esquerda",pRaiz->valor);
         scanf("%i",&valor);
         if(valor != 0){
             Arvore *filho = (Arvore*) malloc(sizeof(Arvore));
             filho->valor = valor;
             pRaiz->pesq = filho;
         Inserir(filho);
         }

//Ler valor do elemento a direita, caso seja 0, este nao terá filhos.  
         printf("Digite o valor do Filho do Elemento %i a Direita",pRaiz->valor);
         scanf("%i",&valor);
         if(valor != 0){
             Arvore *filho = (Arvore*) malloc(sizeof(Arvore));
             filho->valor = valor;
             pRaiz->pdir = filho;
         Inserir(filho);
         }            
     }
 

void PreOrdem(struct no *pRaiz){
     
     printf("%i",pRaiz->valor);
     
             if(pRaiz->pesq != 0);
             PreOrdem(pRaiz->pesq);
             
             if(pRaiz->pdir != 0);
             PreOrdem(pRaiz->pdir); 
     }

main(){
       
      int valor;
       
      Arvore *Raiz = (Arvore*) malloc(sizeof(Arvore)); 
      printf("digite o valor da raiz");
      scanf("%i",&valor);
      
      Raiz->valor = valor;
      
      Inserir(Raiz); 
      
      printf("%i",Raiz->pesq->pesq);
      
      PreOrdem(Raiz);
      
      system("pause");
             
      }

Acredito que o problema esta nos parametros das funções, nas chamadas das funções, ou nos ponteiros

Obrigado

2 Respostas

E

Tio, você não comete esse erro em Java, por que é que está cometendo esse erro em C? Acho que é porque está chegando a hora de você entrar de férias :slight_smile:

if(pRaiz->pesq != 0);  
              PreOrdem(pRaiz->pesq);  
                
              if(pRaiz->pdir != 0);  
              PreOrdem(pRaiz->pdir);

Veja que você pôs um “;” imediatamente depois do if.

douglaskd

putzzzzzzzzzzzzzzz

que vergonha iHUSAUIhsauiHSA

reinicializei os ponteiros com NULL, tire os " ;;"" e funcionou....valeu

#include "stdio.h"
#include "stdlib.h"

//Estrutura da árvore
typedef struct no {
       int valor;
       struct no *pdir;
       struct no *pesq;
} Arvore;

void Inserir(struct no *pRaiz){   
       
//Ler valor do elemento a esquerda, caso seja 0, este nao terá filhos.  
         int valor;        
         printf("Digite o valor do Filho do Elemento %i a Esquerda",pRaiz->valor);
         scanf("%i",&valor);
         if(valor != 0){
             Arvore *filho = (Arvore*) malloc(sizeof(Arvore));
             filho->valor = valor;
             filho->pesq = NULL;
             filho->pdir = NULL;
             pRaiz->pesq = filho;
             Inserir(filho);
         }

//Ler valor do elemento a direita, caso seja 0, este nao terá filhos.  
         printf("Digite o valor do Filho do Elemento %i a Direita",pRaiz->valor);
         scanf("%i",&valor);
         if(valor != 0){
             Arvore *filho = (Arvore*) malloc(sizeof(Arvore));
             filho->valor = valor;
             filho->pesq = NULL;
             filho->pdir = NULL;
             pRaiz->pdir = filho;
             Inserir(filho);
         }            
     }
 

int PreOrdem(struct no *pRaiz){
     
     printf("\n%i",(int) pRaiz->valor);
     
     if(pRaiz->pesq != NULL)
             PreOrdem(pRaiz->pesq);
             
     if(pRaiz->pdir != NULL)
             PreOrdem(pRaiz->pdir); 
             
     return 0;
}

main(){
       
      int valor;
       
      Arvore *Raiz = (Arvore*) malloc(sizeof(Arvore)); 
      printf("digite o valor da raiz");
      scanf("%i",&valor);
      
      Raiz->valor = valor;
      Raiz->pesq = NULL;
      Raiz->pdir = NULL;
      
      Inserir(Raiz); 
           
      PreOrdem(Raiz);
      
      system("pause");
             
      }

deixa eu te perguntar uma coisa, a lógica que eu to usando pra Arvore é essa mesma ?

Criado 5 de dezembro de 2011
Ultima resposta 5 de dez. de 2011
Respostas 2
Participantes 2