Enregistrement d'un arbre binaire

kary -  
random Messages postés 1612 Statut Membre -
Bonjour s'il vous plait je voudrai savoir comment enregistrer un arbre binaire dans un fichier texte ou biniare en langage c et pouvoir reconstituer mon arbre binaire à partir des informations du fichier enfin d'obtenir l'arbre de départ? Merçi
A voir également:

3 réponses

blurk Messages postés 487 Statut Membre 160
 
salut
tu fais comme tu veux du moment que tu lis de la même manière que tu écris, et que tu connais le nombre d'éléments de ton arbre, où sinon
que tu peux détecter une fin de fichier correcte. (correspond au format demandé ou balise détectée)
C'est toi qui définit l'ordre où sont enregistré les éléments.
La seule difficulté est de trouver un algo qui parcours tous les éléments, et cela dépend de la méthode utilisée pour construire l'arbre.
Liste chainée ? tableau cartésien ? concaténation à l'aide de balises ?
cordialement
¤
0
Jolkdarr
 
Hello !

Evite de réinventer la roue !
Je te conseille de bien étudier les techniques classiques de "serialization/deserialization" (en anglais) de données.
Tu peux trouver une mine d'informations à cette adresse :

http://www.parashift.com/c++-faq-lite/serialization.html

Bonne lecture. ;)
0
random Messages postés 1612 Statut Membre 155
 
on peu facilement passer d'une structure d'arbre binaire à une structure de matrice
un arbre binaire est de la forme
1.1
2.1 2.1
3.1 3.2 3.3 3.4
4.1 4.2 4.3 4.3 4.4 4.5 4.6 4.7 4.8
pour définir un noeud il faut deux données sa profondeur et son ordre
ainsi le noeud 4.3 a 4 pour profondeur et 3 pour ordre
il suffit de trouver une correspondance dans un système array de base 1
ceci se fait avec quatre fonctions
une fonction adresse
fonction adresse(profondeur,ordre)
adresse=(2^(profondeur-1))-1+ordre
fin
une fonction pere te permet de trouver le pere
function pere(profondeur,ordre)
si rang est pair alors pere=((profondeur-1)+((rang/20)
sinon pere=((profondeur-1))+((rang+1)/20)
fin
une fonction premierfils(prondeur,ordre) te donnera le premier fils
premierfils=((rang+1)+(((ordre*2)-1)/10
fin
une fonction dernier fils(profondeur,ordre) te donnera le dernier fils
dernierfils=(rang+1)+(ordre*2/10)
fin
tu disposes ainsi d'un ensemble lineaire
apres à toi de voir
0