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 :

Insertion dans un arbre binaire


Sujet :

C

  1. #1
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut Insertion dans un arbre binaire
    Bonsoir tout le monde .

    J'ai un ptit souci concernant l'insertion dans un arbre binaire.
    Mon prog insère 2 éléments de type d'une structure PERSONNE mais qd j'essaye d'afficher l'élément à la racine , l'élément est null. Je ne vois pas pourquoi ? Qqn pourrait m'expliquer ?

    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
    #include <stdio.h>
    #include <stdlib.h>
    #define NEW(x) (x*)malloc(sizeof(x))
    #define BOOLEEN int
    #define VRAI 0
    #define FAUX 1
    #define pNoeud NOEUD *
     
    typedef struct {
        int numPersonne;
        char *nom;
        char *prenom;
        int poids;
        float note;
    } PERSONNE;
     
    // ==================================================================================================================================
     
    typedef struct bidon {
        void *OBJET;
        struct bidon *FilsGauche;
        struct bidon *FilsDroit;
    } NOEUD;
     
    typedef struct {
        NOEUD *racine;
    } ARBRE;
     
     
    static void _ajoutFeuille (void *objet, pNoeud * n) {
     
       *n=(pNoeud)malloc(sizeof(NOEUD));
       (*n)->OBJET = objet;
       (*n)->FilsGauche = NULL;
       (*n)->FilsDroit = NULL;
    }
     
     
    NOEUD * filsGauche (NOEUD *n) {
     
       return (n->FilsGauche);
    }
     
     
    NOEUD * filsDroit (NOEUD *n) {
     
       return (n->FilsDroit);
    }
     
     
    void insertArbre(NOEUD *n, void *objet,int (*comparElem)(void *, void*)) {
     
       if(n == NULL) 
          _ajoutFeuille (objet,&n);
       else {
          if (comparElem(objet,n->OBJET) == -1) 
             insertArbre(filsGauche(n),objet,comparElem);
          else 
             insertArbre(filsDroit(n),objet,comparElem);
       }
    }
     
     
    int comparPersNom (void *pers1, void *pers2) {
     
       PERSONNE *p1 = (PERSONNE *)pers1;
       PERSONNE *p2 = (PERSONNE *)pers2;
       return strcmp(p1,p2);
    }
     
     
    // Interface
    int main(int argc, char *argv[]) {
     
       int i;
       ARBRE *arbre = NEW(ARBRE);
       arbre->racine = NULL;
     
       PERSONNE _tb[] = {
         {1973,"Seth","Dominique",78,7.5},
         {1968,"Enoch","Abdelkader",14,8.25},
         {1418,"Irad","Igor",71,12.5},
         {1515,"Adam","Constantin",68,12.5},
         {1111,"Henosh","Marcel",73,13.},
         {6699,"Noe","Georges",27,8.5},
         {1984,"Cain","Apollinaire",45,8.25},
         {1789,"Abel","Aristide",18,11.75},
         {9669,"Sem","Maurice",43,7.5},
         {3945,"Cham","Leonardo",99,12.5},
         {3141,"Japhet","Aziz",66,5.25}
       };
     
       for (i=0;i<2;i++) {
          //verif = ajoutElem (arbre, &(_tb[i]), compareNom);
          //verif = ajouterFeuille (&(_tb[i]), &(arbre->racine), compareNom);
          insertArbre(arbre->racine,&(_tb[i]),comparPersNom);
       }
     
       if (arbre->racine) {
          PERSONNE *p = arbre->racine->OBJET;
          printf("Nom : %s\n",p->nom);
       }
       else 
          printf("Pb d'allocation\n");
       //affichArbre(arbre,affichPersonne);
    }

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Par défaut
    static void _ajoutFeuille (void *objet, pNoeud** n) {

    *n=(pNoeud)malloc(sizeof(NOEUD));
    (*n)->OBJET = objet;
    (*n)->FilsGauche = NULL;
    (*n)->FilsDroit = NULL;
    }

    pNoeud** ---> c'était probablement ton erreur

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Par défaut
    Désolé, ce n'était pas cela; je n'avais pas vu le #define pNoeud NOEUD*

    par contre, en étudiant ton code plus attentivement, je pense avoir trouvé la source du problème:

    dans insertArbre, tu passes comme premier argument un NOEUD* alors qu'il faudrait que ce soit un NOEUD**

  4. #4
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Effectivement en passant l'adresse du pointeur ca va mieux

    Merci pour ta réponse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insertion dans un arbre binaire Rouge-Noir (Red-Black Tree)
    Par monsieurouxx dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 25/06/2010, 18h29
  2. Motif dans un arbre binaire.
    Par karas.uchiwa dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 13/04/2010, 15h09
  3. Réponses: 2
    Dernier message: 07/12/2009, 11h43
  4. Ajout dans les arbres binaires de recherche
    Par chouki dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 28/12/2008, 15h32
  5. Suppression dans un arbre binaire de recherche
    Par zeine77 dans le forum Langage
    Réponses: 1
    Dernier message: 11/05/2007, 20h40

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