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
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 suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
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...)
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager