Arvores em C - problemas com Ponteiros

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

ele imprime a préOrdem com problemas:

[code]#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");
         
  }[/code]

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

Obrigado

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.

putzzzzzzzzzzzzzzz

que vergonha iHUSAUIhsauiHSA

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

[code]#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");
         
  }[/code]

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