Ir para conteúdo
Fórum Script Brasil

PauloJr

Membros
  • Total de itens

    5
  • Registro em

  • Última visita

Tudo que PauloJr postou

  1. PauloJr

    Problemas com Arvore

    Depois de muito tentar e ler um pouco conseguir resolver o problema, fica solução caso alguém tenha o mesmo problema que eu. Eu não testei a busca, e é somente um Arvore binária. #include <stdio.h> #include <stdlib.h> typedef struct _raiz { int valor; struct _raiz *No_Dir; struct _raiz *No_Esq; } 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 Imprime(Raiz* Arvore){ if(!Arvore) return 0; printf("%d\n", Arvore->valor); Imprime(Arvore->No_Dir); Imprime(Arvore->No_Esq); } 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; (*Arvore) = Novo_No; }; void Adiciona(Raiz ** Arvore, int valor){ Raiz * No_Aux; if(!(*Arvore)){ Incluir(&(*Arvore), valor); return 0; } if(valor >= (*Arvore)->valor){ Adiciona(&(*Arvore)->No_Dir, valor); } else Adiciona(&(*Arvore)->No_Esq, valor); }; 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); } Imprime(Arvore); }
  2. PauloJr

    Problemas com Arvore

    Cara muito obrigado pela sua resposta mais ainda vou dar uma tentada no ponteiro de ponteiro, para ver se entendo melhor como funciona. Porém #include <stdio.h> #include <stdlib.h> typedef struct _raiz { int valor; struct _raiz *No_Dir; struct _raiz *No_Esq; } 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 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); } 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){ 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 troca(Raiz **Arvore, int valor){ Raiz * Nova_raiz; Nova_raiz = (Raiz*) malloc(sizeof(Raiz*)); printf("Endereco antes troca:%d\n", Arvore); (*Arvore) = Nova_raiz; (*Arvore)->valor = valor; printf("Endereco depois troca:%d\n", Arvore); } 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); } Imprime(Arvore); printf("\nValor :%d Valor2: %d\n", Arvore, Arvore2); scanf("%d", &valor); printf("antes troca %d endereco %d\n", Arvore->valor, Arvore); troca(&Arvore, valor); printf("depois troca %d endereco %d\n", (*Arvore).valor, Arvore); } Me gera os seguintes erros: G:\Algoritmo\Arvore.c||In function 'Imprime':| G:\Algoritmo\Arvore.c|33|warning: 'return' with a value, in function returning void| G:\Algoritmo\Arvore.c||In function 'Adiciona':| G:\Algoritmo\Arvore.c|57|warning: passing argument 1 of 'Incluir' from incompatible pointer type| G:\Algoritmo\Arvore.c|41|note: expected 'struct Raiz **' but argument is of type 'struct Raiz ***'| G:\Algoritmo\Arvore.c|58|warning: 'return' with a value, in function returning void| G:\Algoritmo\Arvore.c|63|warning: passing argument 1 of 'Adiciona' from incompatible pointer type| G:\Algoritmo\Arvore.c|54|note: expected 'struct Raiz **' but argument is of type 'struct _raiz *'| G:\Algoritmo\Arvore.c|66|warning: passing argument 1 of 'Adiciona' from incompatible pointer type| G:\Algoritmo\Arvore.c|54|note: expected 'struct Raiz **' but argument is of type 'struct _raiz *'| ||=== Build finished: 3 errors, 5 warnings ===| Gostaria de saber se alguém me explica o erro da linha 41.
  3. PauloJr

    Problemas com Arvore

    Enfim se alguém poder me ajudar com o código transforma em ponteiro de ponteiro, eu agradesço. Pois por mais que ache que saiba manipular já recebi alguns erros aqui que não consigo concerta, se tiver alguém com experiência eu agradesço.
  4. PauloJr

    Problemas com Arvore

    A arvore tem que ser escrita em C, para não usar os recursos de C++. PEriWinkle eu poderia usar da forma que você escreveu se eu definisse a função como sendo do tipo Raiz*. Então não podizer que ela if(Raiz->valor < valor){ Raiz->No_Dir = adiciona(Raiz->No_Dir,valor); } Já que é do tipo void, estudei um pouco mais e entendi que errei ao entender os argumentos como Adiciona(Raiz *Arvore, int valor){ teria que ser Adiciona(Raiz **Arvore, int valor){
  5. 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.
×
×
  • Criar Novo...