Clique no botão BACK do seu navegador para voltar à página anterior /* Arvore Dinâmica em linguagem C*/ /* Autor : Alexandro Augusto Parra Anselmo*/ #include "stdio.h" #include "stdlib.h" #include "conio.h" #include "alloc.h" #include "string.h" struct no{ char nome[20]; struct no *filho; struct no *irmao;} *raiz = NULL, *marcador; int linha; void percorrerarvore(struct no *n){ char resposta ; int opcao, cont=1; struct no *aux; clrscr(); for(aux=n; aux!=NULL; aux = aux->irmao, cont++) printf("\n %d-%s", cont, aux->nome); printf("\n opcao"); scanf("%d", &opcao); if((opcao<1)||(opcao>=cont)) percorrerarvore(n); printf("\n Este e o no desejado?(s/n)"); resposta=getche(); for(aux=n, cont=1; contirmao); if(resposta=='s') marcador = aux; else if(aux->filho!=NULL) percorrerarvore(aux->filho); } void inserir(void){ struct no *novo_no, *aux_irmao; if((novo_no=(struct no *)malloc(sizeof(struct no)))==NULL) printf("\n nao há memória"); else{ printf("\n entre com o nome"); scanf("%s", &novo_no->nome); novo_no -> filho = NULL; novo_no -> irmao = NULL; if(raiz == NULL) raiz = novo_no; else{ percorrerarvore(raiz); if(marcador -> filho == NULL) marcador -> filho = novo_no; else{ for(aux_irmao = marcador->filho; aux_irmao->irmao!=NULL; aux_irmao = aux_irmao->irmao); aux_irmao->irmao = novo_no; } }}} void listar (struct no *n, int coluna) { struct no *aux; if (n!=NULL) for (aux=n;aux!=NULL;aux=aux->irmao) { gotoxy(coluna,linha=linha+1); printf("%s - ",aux->nome,linha); listar(aux->filho,coluna+strlen(aux->nome)+3); } } void percorrer_r(struct no *n, char nome_pai[20]){ struct no *aux; if (n!=NULL) for (aux=n;aux!=NULL;aux=aux->irmao) if (strcmpi(aux->nome,nome_pai)==0) marcador=aux; else percorrer_r(aux->filho,nome_pai); } void inserir_r(void){ struct no *novo_no, *aux_irmao; char nome_pai[20]; if((novo_no=(struct no *)malloc(sizeof(struct no)))==NULL) printf("\n nao há memória"); else{ printf("\n entre com o nome"); scanf("%s", &novo_no->nome); novo_no -> filho = NULL; novo_no -> irmao = NULL; if(raiz == NULL) raiz = novo_no; else{ printf("\n Entre com o nome do no pai"); scanf("%s",&nome_pai); percorrer_r(raiz,nome_pai); if(marcador -> filho == NULL) marcador -> filho = novo_no; else{ for(aux_irmao = marcador->filho; aux_irmao->irmao!=NULL; aux_irmao = aux_irmao->irmao); aux_irmao->irmao = novo_no; } }}} void menu(void) { int op; clrscr(); printf("\n1- Inserir"); printf("\n2- Inserir Recursivo"); printf("\n3- Listar"); printf("\n4- Sair"); printf("\nOpcao-> "); scanf("%d",&op); switch(op) { case 1: inserir(); getch(); menu(); break; case 2: inserir_r(); getch(); menu(); break; case 3: clrscr(); linha=0; listar(raiz,1); getch(); menu(); break; case 4: exit(0); default: printf("\n Opcao invalida"); getch(); menu(); } } void main(void) { menu(); }