Boa noite.
Tenho que criar uma Agenda com Árvore Binária em C.
Mas o problema é que ela só está substituindo os registros já gravados. Na listagem, aparece apenas o ultimo registro informado.
Segue o código:
[code]#include <stdio.h>
#include <stdlib.h>
typedef struct Contatos{
int codigo;
char nome[10];
}Contatos;
typedef struct Raiz{
Contatos* contato;
struct Raiz* esquerda;
struct Raiz* direita;
}Arvore;
/*
Arvore* criaArvore(){
return NULL;
}
/
Arvore insere(Arvore* Arv, Contatos Reg){
if(Arv == NULL){
Arv = (Arvore) malloc(sizeof(Arvore));
Arv->contato = Reg;
Arv->esquerda = NULL;
Arv->direita = NULL;
}
else{
if((Arv->contato->codigo) < (Reg->codigo))
Arv->esquerda = insere(Arv->esquerda, Reg);
else
if((Arv->contato->codigo) > (Reg->codigo))
Arv->direita = insere(Arv->direita, Reg);
}
return Arv;
}
void exibirOrd(Arvore *Arv){
if(Arv != NULL){
exibirOrd(Arv->esquerda);
printf("\nCodigo: %d “,Arv->contato->codigo);
printf(”\nNome: %s ",Arv->contato->nome);
exibirOrd(Arv->direita);
}
}
int main(){
int op;
Arvore *Arv = NULL;
Contatos cont;
do{
system(“cls”);
printf(">> MENU <<");
printf("\n\n[1] - INSERIR"
"\n[2] - EXIBIR");
printf("\n\nOPCAO: ");
scanf("%d",&op);
switch (op){
case 1:
system("cls");
printf("Codigo: ");
scanf("%d",&cont.codigo);
printf("Nome: ");
setbuf(stdin, NULL);
gets(cont.nome);
Arv = insere(Arv, &cont);
fflush(stdin);
getchar();
break;
case 2:
exibirOrd(Arv);
fflush(stdin);
getchar();
break;
}
}while(op != 3);
fflush(stdin);
getchar();
return 0;
}
[/code]
Sobre a struct Contatos, está correto o uso dessa forma?
Abraço!