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 :

arbre binaire & création de noeud [Débutant(e)]


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Points : 263
    Points
    263
    Par défaut arbre binaire & création de noeud
    Voila mon problème
    dans un .h j'ai la définition suvante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct     s_btree
    {
      void             *item;
      struct s_btree   *left;
      struct s_btree   *right;
    }                  t_btree;
    Je dois faire une fonction qui doit ajouter un noeud. Elle est prototypé colmme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t_btree		*new_btree_node(void *item)
    J'ai pas eu de cours sur les arbres binaires, et les recherches que j'ai fait, n'ont pas été très clair.

    J'ai fait de ette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    t_btree		*new_btree_node(void *item)
    {
        new_btree_node->item = (void *)malloc(sizeof(item));
    }
    Evidement ça me met une erreur !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     error: request for member `item' in something not a structure or union
    Et c'est la que je comprend pas, je dois créer un noeud oui, mais y'a pas d'arbre !!! Donc je ne sais pas trop comment c'est possible.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Tu peux utiliser comme définition pour les arbres ceci
    Arbre --> NULL
    Arbre --> (Noeud, Arbre, Arbre)
    alors, tu as forcément un arbre au début, simplement sa valeur est NULL.

    Ta fonction de création peut s'écrire de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    t_btree *new_btree_node(void *item)
    {
      t_btree *new_btree = malloc(sizeof( *new_btree));
      // il faut toujours tester le retour de malloc
      if (new_btree != NULL)
      {
           new_btree->item = item;
           new_btree->left = NULL;
           new_btree->right = NULL;
      }
      return new_btree;
    }

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Points : 263
    Points
    263
    Par défaut
    Ok ! Merci !
    Mais pour que je comprenne bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    t_btree *new_btree_node(void *item)
    {
      t_btree *new_btree = malloc(sizeof( *new_btree));
     //ici on créer l'arbre et on lui alloue un espace mémoire c'est ça ?
      if (new_btree != NULL)
      {
           new_btree->item = item;
           new_btree->left = NULL;
           new_btree->right = NULL;
      }
      return new_btree; //ici on retourne donc l'arbre créer ?
    }
    donc, si je comprend bien on a crée le premier noeud, donc l'arbre ?

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Oui et non. Un arbre peut avoir la valeur NULL donc il existe mais il est vide.
    Mais si tu lui affecte un premier noeud on peut effectivement dire que tu l'as créé.
    La fonction permet de créer un noeud terminal de l'arbre, puisque ses fils sont à NULL.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Points : 263
    Points
    263
    Par défaut
    Oui et non. Un arbre peut avoir la valeur NULL donc il existe mais il est vide.
    Arbre --> NULL
    ok !

    La fonction permet de créer un noeud terminal de l'arbre, puisque ses fils sont à NULL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      if (new_btree != NULL)
      {
           new_btree->item = item;
           new_btree->left = NULL;
           new_btree->right = NULL;
      }
    ok !
    Merci pour ces précisions

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

Discussions similaires

  1. Comptage noeuds arbres binaires
    Par ramdamriddim dans le forum Langage
    Réponses: 0
    Dernier message: 07/12/2010, 18h52
  2. Réponses: 2
    Dernier message: 07/12/2009, 12h43
  3. somme des noeuds d'un arbre binaire
    Par bibi182 dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2007, 12h30
  4. [débutant Java] création d'un arbre binaire
    Par barouz dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2006, 05h25
  5. Réponses: 3
    Dernier message: 31/12/2005, 13h30

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