Árvore em disco
#include
typedef struct arvore
{
int id; struct arvore *dir; struct arvore *esq;
} arvore;
arvore *aloca()
{
arvore *novo = (arvore*)malloc(sizeof(arvore)); printf("Entre com a chave: "); scanf("%d", &(novo->id)); return novo;
}
void salvaItemArv(arvore *T, FILE *arquivo, int camada)
{
int i;
if(T == NULL) { return; } else { salvaItemArv(T->dir, arquivo, camada+1);
for(i=0; iid); salvaItemArv(T->esq, arquivo,camada+1); }
}
void salvaArquivoArv(arvore *T)
{
FILE *arquivo; arquivo = fopen("arquivo.txt","a"); fprintf(arquivo, "\nIMPRESSAO DA ARVORE BINARIA\n\n"); salvaItemArv(T,arquivo, 0); fclose(arquivo);
}
void salvaItem (arvore *T, FILE *arq)
{
if(T->esq)salvaItem(T->esq,arq); fprintf(arq, "ID: %d\n", T->id); if(T->dir)salvaItem(T->dir,arq);
}
void salvaArquivo(arvore *T)
{
FILE *arq; arq = fopen("arquivo.txt","w"); fprintf(arq, "IMPRESSAO DA LISTA DE CHAVES\n\n"); salvaItem(T,arq); fclose(arq);
}
void imprimir(arvore *chave)
{
printf("\n-----------------------------------------\n"); printf("ID: %d\n", chave->id); printf("-----------------------------------------\n");
}
void imprimirLista(arvore *T)
{
if(T == NULL) { return; } else { imprimirLista(T->esq); imprimir(T); imprimirLista(T->dir); }
}
void cadastrar(arvore **T, arvore *novo)
{
if((*T) == NULL) { novo->dir = NULL; novo->esq = NULL; (*T) = novo; } else { if(novo->id == (*T)->id) { printf("\nChave ja cadastrada!\n"); } else if(novo->id < (*T)->id) { cadastrar(&((*T)->esq), novo); } else { cadastrar(&((*T)->dir), novo); } }