à tous les vrai programmeurs

Bonjour,
je cherche un programmeur en langage c qui sais comment enregistrer un arbre binaire de recherche dans un fichier .txt
(enregistrer le contenu des noeuds de cet arbre)
donc quand on ouvre le fichier.txt en trouve cela par exemple:
12 -1 -1
3 2 6
45 60 20
......
CE QUI EST A GAUCHE C LA VALEUR DU NŒUD ET CE QUI EST AU MILIEU C LA GAUCHE ET CE QUI EST A DROITE C LA DROITE DU NŒUD................................
Configuration: Windows XP
Firefox 2.0.0.14

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. je ne suis pas programeur mais le binaire ce n'est pas que des 0 et des 1???
    1. je veux enregistrer cette arbre dans un fichier text .txt pas binaire
    2. @zargossa ok dsl je n'y connai pratiquement rien voir rien du tt en programation
  2. voila j'ai tenté de faire cela mais donne rien

    arbre* enregistrer(arbre *a) {
    arbre*valeur;
    FILE*fichier = NULL;
    fichier=fopen("C:\tp_c\test","r+");
    if(!estVide(a))
    prefixe(a);
    ecritureFichier(a);
    }

    qq un peu me dire comment adapter cela pour qu'il fonctionne
    1. Salut,

      je nevois pas l'interrêt de faire une sauvegarde de cette façon? peut être peux
      tu m'expliquer un plus.

      Valeur-Gauche-Droite

      comment vas tu récupérer l'arbre à partir du fichier pour qu'il retrouve son état initiale?

      voici ma sugestion :
                                                              R0
                                                               |
                                              R1-------------------------------R7
                                               |                               |
                                 R2-----------------------R6    R8----------------------R11
                                 |                              |
                        R3 ----------- R4              R9--------------R10
                                       |
                                 R5-----
      

      R0::Valeur
      R1:R0:Valeur Gauche de R0
      R2:R1:Valeur Gauche de R1
      R3:R2:Valeur Gauche de R2
      R4:R2:Valeur Droite de R2
      R5:R4:Valeur Gauche de R4
      R6:R1:Valeur Droite de R1
      R7:R0:Valeur Droite de R0
      R8:R7:Valeur Gauche de R7
      R9:R8:Valeur Gauche de R8
      R10:R8:Valeur Droite de R8
      R11:R7:Valeur Droite de R7

      Donc c'est sous forme : <Numero>:<Numero Parent>:<Valeur>

      de cette façon on peut récupérer l'arbre dans son état initial
      (avant l'enregistrement dans un fichier)
      1. ce que je veux c'est enregistrer les valeurs des noeuds dans fichier texte comme ca

        12 -1 -1
        4 7 3
        5 -1 -1
        .....

        les -1 indique que le noeuds na pas de fils
        et on a
        valeur du noeud gauche droite
    2. si 12 n'a pas de fils alors
      4 7 3
      5 -1 -1
      que représentent-ils?

      peux tu faire un schéma des valeurs de ton exemple pour représenter l'arbre parce que je n'ai pas bien suivi?
      1. DSL pour le 12 je n'ai voulu ecrire q'un exemple
        voila ce que je veu dire

        12 10 18
        10 5 11
        18 17 20
        5 -1 -1
        11 -1 -1
        17 -1 -1
        20 -1 -1

        voila ce que je veux dire
      2. @zargossvoila le shema de cet arbre binaire de recherche

        12
        I
        I-----------I
        10 18
        I I
        I---------------I I
        5 11 I
        I
        I-------------I
        17 20

        VOILA j'esspere que c'est cmprehensible
      3. @zargosslol il est par ecri correctement bon voila ceci je pense est sufisant
        12 10 18
        10 5 11
        18 17 20
        5 -1 -1
        11 -1 -1
        17 -1 -1
        20 -1 -1
    3. il faut utiliser la récursivité comme pour parcourir l'arbre

      Excuses-moi, je vais écrire un algorithme et non en C car ça fait des lustre que je n'utilise plus et je ne l'ai même pas sur ma machine.

      Fonction EnregistreNoeud(A : pointeur, f : Fichier)
          Buffer = 'Valeur de A'
          si 'Gauche de A' != null alors
             Buffer=Buffer + ' ' + 'Valeur Gauche de A' 
          sinon
             Buffer=Buffer + ' -1' 
          Fin si
          si 'Droite De A' != null alors
             Buffer=Buffer + ' ' + 'Valeur Droite de A' 
          sinon
             Buffer=Buffer + ' -1' 
          Fin si
          EcrireDansFichier(f, Buffer)                               
          EnregistreNoeud('Gauche de A')
          EnregistrerNoeud('Droite de A')
      Fin Fonction
      
      Fonction EnregistrerArbre(RacineArbre : pointeur);
         OuvrirFichier(f, 'c:\Test.txt')                             
         EnregistreNoeud(RacineArbre)
         FermerFichier(f)
      Fin Fonction