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.