Ler e Gravar dados de Arvore Binária em Arquivo

1 resposta
E

Boa noite..

Alguém sabe como ler e gravar dados de uma árvore binária em arquivos texto?

Tenho as funções de leitura e gravação assim:

Estrutura:
typedef struct Contatos{
   int codigo;
   char nome[10];
}Contatos;

typedef struct Raiz{
   Contatos contato;  
   struct Raiz* esquerda;
   struct Raiz* direita;
}Arvore;

Gravação:

void gravaArquivo(Arvore* Arv){
   FILE *arquivo;
   int i;
   arquivo = fopen("Contatos.txt","w");
   if(Arv != NULL){
      fwrite(&Arv->contato, sizeof(Arvore), 1, arquivo);
   }
   fclose(arquivo);
}
Leitura:
Arvore* carregaArquivo(Arvore* Arv){
   FILE *arquivo;
   arquivo = fopen("Contatos.txt","r");
   rewind(arquivo);
   int i = 0;
   
   if(Arv == NULL){
      Arv = (Arvore*) malloc(sizeof(Arvore));
      Arv->esquerda = NULL;
      Arv->direita = NULL;  
   }
   fread(&Arv->contato, sizeof(Arvore), 1, arquivo);
       
   fclose(arquivo);
   return Arv;
}

Mas ela ta gravando e lendo apenas o primeiro registro..
Como faço para movimentar a árvore ? Seria com recursividade?

Abraço!

1 Resposta

J

void gravaArquivo(Arvore* Arv){ FILE *arquivo; int i; arquivo = fopen("Contatos.txt","w"); if(Arv != NULL){ fwrite(&Arv->contato, sizeof(Arvore), 1, arquivo); } fclose(arquivo); }

Aqui você só passa o registro contato para fwrite.
Precisa gravar os outros também.

Uma boa saída seria criar um método que recebe um vetor de arvores(ou apontadores) e escrever um por um com seus registros no arquivo. Posteriormente você pode fazer o caminho inverso e carregá-los novamente em um vetor. Assim seu problema de movimentação de registros estaria resolvido.

achei esse artigo na internet agora:

http://www.facom.ufu.br/~madriana/EBD/pratica6.pdf

Criado 17 de novembro de 2011
Ultima resposta 18 de nov. de 2011
Respostas 1
Participantes 2