IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Implementation d'Arbre Binaire


Sujet :

C

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut Implementation d'Arbre Binaire
    Bonjour ... ,

    Je veux alimenter mon arbre binaire avec les membres d'une famille comme suit : chaque noeud contient comme infos (rang et prenom)

    GrandPere

    Parent1 Parent2

    Enfant1 Enfant2 Enf1 Enf2

    J'ai trouvé des difficultés pour concevoir la manière dont on peut insérer les prenom, car je dois les inserer par rapport à leurs rang !!

    Alors, ce que j'ai proposé comme solution temporaire , c'est que j'ai utilisé bien evidement une structure arbre compagnée par une fonction qui permet d'ajouter les noeud selon un ordre bien déteminé , c'est à dire, c'est moi qui a précisé cet ordre qui est comme suite :

    j'ai considéré que j'ai just 3 niveau dans l'arbre, et j'ai numéroté les rang pour chaque noeud :
    4
    3 6
    1 2 5 7


    Pourquoi ce-ci ?? C'est pour que je puisse faire des testes lors de l'ajout d'un noeud comme vous pouvez le constater dans mon code .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
     
     
    /*Structure de données: Arbre binaire de recherche*/
    #include <stdio.h>
    #include <stdlib.h>
    #define TRUE 1
     
    /* Définition de la structure Noeud d'un arbre*/
    typedef struct _Noeud{
      int rang;
      char prenom[30];
      struct _Noeud* succ_gauche;
      struct _Noeud* succ_droit;
    } Noeud;
     
    /*Définition du type TArbre, une structure de type TArbre est définie par un pointeur sur la racine de l'arbre*/
    typedef Noeud* TArbre;
     
    /* Fonction ajouterNoeud: crée un Noeud et l'ajoute dans un arbre binaire de recherche.*/
    void ajouterNoeud(TArbre* arbre,char *pren,int r)
    {
        Noeud* nouveauNoeud;
        TArbre pArbre; /* Variable utilisée pour parcourir l'arbre*/
     
            // -------------->> Création du nouveau noeud  <<----------------
        nouveauNoeud=(Noeud *)malloc(sizeof(Noeud));
        nouveauNoeud->rang=r;
        strcpy(nouveauNoeud->prenom,pren);
        nouveauNoeud->succ_gauche=NULL;
        nouveauNoeud->succ_droit=NULL;
     
            // ---------->> Ajout du nouveau noeud dans l'arbre  <<-----------
        pArbre=*arbre;
     
        // ->> si c'est un nouvel arbre alors le nouveau noeud sera la racine de cet arbre
        if(pArbre==NULL)
                pArbre=nouveauNoeud;
        else
        {
            while(TRUE)
            {
                if(r < pArbre->rang)
                {
                    if(pArbre->succ_gauche == NULL)
                    {
                        pArbre->succ_gauche = nouveauNoeud;
                        break;
                    }
                    else
                        pArbre = pArbre->succ_gauche;
                }
                else
                {
                    if(pArbre->succ_droit == NULL)
                    {
                        pArbre->succ_droit = nouveauNoeud;
                        break;
                    }
                    else
                        pArbre = pArbre->succ_droit;
                }
            }
        }
    }
     
    void sauvgarder(FILE *f,TArbre arbre)
    {
      if(arbre){
          fprintf(f,"prenom : %s      rang : %d\n",arbre->prenom,arbre->rang);
          sauvgarder(f,arbre->succ_droit);
          sauvgarder(f,arbre->succ_gauche);
      }
    }
     
    void ecrireFichier(TArbre arbre)
    {
        FILE *f=fopen("solution.txt","w");
        if(!f)
             printf("Erreur douverture\n");
        else{
            sauvgarder(f,arbre);
        }
       fclose(f);
    }
     
    int main()
    {
        TArbre *arbre;
        char prenom_grandParent[30];
        char prenom_Parent1[30];
        char prenom_Parent2[30];
        /*char prenom_grandParent[30];
        char prenom_Parent1[30];
        char prenom_Parent2[30];*/
     
        printf("\n\n\t\t\t############################################\n");
            printf("\t\t\t#        REALISER PAR ETUDIANTE            #\n");
            printf("\t\t\t#           SISINIYA                       #\n");
            printf("\t\t\t############################################\n");
     
        printf("\n\n-->>Les numero des rangs de chaque noeud de l'arbre binaire ont ete propose comme suite : \n\n");
        printf("\t\n                             |4| \n");
        printf("\t         |3|                      |6|\n");
        printf("\t    |1|      |2|           |5|          |7|\n\n");
     
        printf("\n -->> entrer le prenom du grande pere  : ");
        scanf("%s",prenom_grandParent);
        fflush(stdin);
        ajouterNoeud(arbre,prenom_grandParent,4);
     
        printf("\n -->> entrer le prenom des fils du grand parent : \n ");
        printf("\t\t * Prenom Parent 1 : ");
        scanf("%s",prenom_Parent1);
        fflush(stdin);
        ajouterNoeud(arbre,prenom_Parent1,3);
     
        printf("\n\t\t * Prenom Parent 2 : ");
        scanf("%s",prenom_Parent2);
        fflush(stdin);
        ajouterNoeud(arbre,prenom_Parent2,6);
     
        ecrireFichier(*arbre);
     
        printf("\n\n \t\tFIN DE MON APPLICATION \t\t  Sisiniya 2009/2010\n\n");
     
     
        return 0;
    }
    je sais bien que ma proposition pour résoudre le problème n'est pas pratiquable, C'est pour cela vient ma demande :

    Mon Code me génére une erreur d'execution , c'est que lorsqu'il arrive à l'instruction du main , là où il y a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    printf("\n -->> entrer le prenom du grande pere  : ");
        scanf("%s",prenom_grandParent);
        fflush(stdin);
        ajouterNoeud(arbre,prenom_grandParent,4);
    quand je saisi , et au lieu qu'il me passe la main de saisir les parents, il n'arrive pas à executer ajouterNoeud (Voir SVP l'image qui illustre bien l'erreur )



    Merci bien pour votre aide.


    Sisiniya
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Afficher un arbre binaire avec sa structure
    Par PhoneKilleR dans le forum C
    Réponses: 7
    Dernier message: 23/04/2008, 23h24
  2. implementer une faune sous forme d'arbre binaire.
    Par mansour67 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 01/04/2008, 17h22
  3. Réponses: 11
    Dernier message: 07/04/2004, 13h06
  4. Arbre binaire
    Par Heaven dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 02/02/2004, 19h01
  5. [LG]probleme de creation arbre binaire
    Par jsaviola dans le forum Langage
    Réponses: 2
    Dernier message: 06/01/2004, 20h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo