Bonsoir,
je cherche une technique pour écrire un arbre dans un fichier
pour pouvoir le recréer à la lecture du fichier.
si quelqu'un peut m'orienté
merci d'avance
Version imprimable
Bonsoir,
je cherche une technique pour écrire un arbre dans un fichier
pour pouvoir le recréer à la lecture du fichier.
si quelqu'un peut m'orienté
merci d'avance
Je n'ai jamais essayé en fait, mais je pense que si tu utilises une technique récursive d'écriture de l'arbre style
tu dois pouvoir reconstruire ton arbre en utilisant le principe suivantCode:
1
2
3
4
5
6 void ecrire_arbre(arbre *f) { ecrire_valeur_arbre(f); ecrire_arbre(f->fg); ecrire_arbre(f->fd); }
ecrire_valeur_cle enregistre les données de la feuille considérée et un code particulier si la feuille est NULL.Code:
1
2
3
4
5
6
7
8
9
10
11 arbre *lire_arbre(void) { arbre *tmp = lire_valeur_arbre(); if (tmp != NULL) { tmp->fg = lire_arbre(); tmp->fd = lire_arbre(); } return tmp; }
lire_valeur_arbre() alloue une nouvelle feuille si les données sont valides ou retourne NULL si elle a lu le code particulier de la feuille NULL.
merci j'étais en train de réflechir à ça avant de coder
je pense que c'est la meilleure solution, j'ai juste peur que sa ne soit pas dans
l'ordre..
je posterai une réponse quand j'aurais codé et testé cette technique
J'ai fait une erreur dans le code de l'écriture :
Code:
1
2
3
4
5
6
7
8
9 void ecrire_arbre(arbre *f) { ecrire_valeur_arbre(f); if (f != NULL) { ecrire_arbre(f->fg); ecrire_arbre(f->fd); } }
Il y a plusieurs façons d'écrire un arbre, même un arbre binaire.
Le problème majeur, c'est que les éléments sont "facultatifs". Donc, il faut nécessairement indiquer dans le fichier si un noeud a des fils ou non, et lesquels.
Selon le code de Trap D, ça peut être avec une valeur spéciale "noeud nul" qui serait écrite par ecrire_valeur_arbre() quand f est NULL, et qui ferait retourner NULL à lire_valeur_arbre().
Ou bien, on utilise un autre mode de stockage, qui peut être intéressant pour les arbres très remplis, ou les arbres parfaits: Stocker l'arbre binaire sous une forme "aplatie", équivalent plus ou moins à un parcours en largeur. Ici, la taille ne dépend pas du nombre de noeuds, mais uniquement de la profondeur de l'arbre.
(note que la remarque après le dessin correspond à ce que j'ai dit sur le code de Trap D...)