Estou escrevendo o código abaixo para que o mesmo crie uma arvore, porém estou tendo o seguinte problema, há arvore em si não é criada.
Ele simplesmente não emenda um nó com o outro.
Então peço ajuda dos demais para que me expliquem o por que. por que pelo o que eu consegui encontrar de erro nesse código foi na manipulação de ponteiros.
Pergunta
PauloJr
Estou escrevendo o código abaixo para que o mesmo crie uma arvore, porém estou tendo o seguinte problema, há arvore em si não é criada.
Ele simplesmente não emenda um nó com o outro.
Então peço ajuda dos demais para que me expliquem o por que. por que pelo o que eu consegui encontrar de erro nesse código foi na manipulação de ponteiros.
#include <stdio.h> #include <stdlib.h> typedef struct Raiz{ struct Raiz *No_Dir; struct Raiz *No_Esq; int valor; }Raiz; Raiz * Busca(Raiz *Arvore,int valor){ if(Arvore == NULL) return Arvore; if(Arvore->valor == valor) return Arvore; if(valor > Arvore->valor) if(Arvore->No_Dir == NULL) return Arvore; else Busca(Arvore->No_Dir, valor); else if(Arvore->No_Esq == NULL) return Arvore; else Busca(Arvore->No_Esq, valor); } void Incluir(Raiz *Arvore,int valor){ Raiz * Novo_No; Novo_No = (Raiz*) malloc(sizeof(Raiz)); Novo_No->No_Dir = NULL; Novo_No->No_Esq = NULL; Novo_No->valor = valor; printf("Endereco arvore incluir %d\n", Arvore); Arvore = Novo_No; printf("Endereco arvore incluir2 %d\n", Arvore); } void Adiciona(Raiz *Arvore, int valor){ Raiz * Arvore2; printf("Endereco arvore %d\n", Arvore); if(Arvore == NULL){ Incluir(Arvore, valor); return 0; }else if(valor >= Arvore->valor){ printf("recursivo\n"); printf("Endereco arvore saida %d\n", Arvore->No_Dir); Adiciona(Arvore->No_Dir, valor); } else Adiciona(Arvore->No_Esq, valor); } void Imprime(Raiz* Arvore){ if(!Arvore){ printf("Saiu aqui\n"); return 0; } printf("%d", Arvore->valor); printf("%d", Arvore->No_Dir); Imprime(Arvore->No_Dir); Imprime(Arvore->No_Esq); } int main(){ Raiz *Arvore, *Arvore2, nova_arvore, *Mem; int valor, teste; Arvore = (Raiz*) malloc(sizeof(Arvore)); Arvore->No_Dir = NULL; Arvore->No_Esq = NULL; if(Arvore == NULL) printf("ERRO!"); Arvore->valor = 0; while( valor != 0 ){ scanf("%d", &valor); Adiciona(Arvore, valor); printf("No dir: %d\n", Arvore->No_Dir); } Arvore2 = Arvore->No_Dir; printf("Valor :%d Valor2: %d\n", Arvore, Arvore2); Imprime(Arvore); }Cara to precisando mesmo da ajuda pra resolver isso então quem poder me dar uma luz desde já agradesço.
Link para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.