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 :

Arbres binaires / Pointeurs


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Par défaut Arbres binaires / Pointeurs
    Bonjour à tous !!

    Voila mon arbre binaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    typedef struct noeud NOEUD;
     
    typedef struct {
      int nb;
    } noeudG ;
     
    struct noeud {
      int nb;
      NOEUD* fd;
      noeudG* fg;
    };
    (Il n'y a jamais de fils pour les fils de gauche)

    J'essai de faire un ajout, mais je tombe sur un
    assignment from incompatible pointer type
    Voila le code correspondant :

    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
    NOEUD *arbre;
    
    void ajouter_arbre(NOEUD* nd)
    {[...]
      if (arbre != NULL)   /* Si l'arbre n'est pas vide */
      {
        if (arbre->fd == NULL)       /* Un seul noeud */
        {
            if (arbre->nb > nd->nb)
            {
             arbre->fg->nb=arbre->nb;
              arbre->fd=nd;
            }
            else
            {
              arbre->fd=arbre;
              arbre->fg->nb=nd->nb;
            }
            arbre->nb=arbre->nb+nd->nb;
        }
      }
    }
    Ce que je veux faire :

    Si il n'y a qu'une valeur (donc sans fils), si elle est supérieure à nd->nb, alors
    nd->nb va être le fils droit du noeud et ce qui était avant le seul noeud va devenir le noeud gauche.

    Ensuite le 1er noeud, fais la somme des noeuds gauche + droite.

    Merci pour votre aide!

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Je ne comprends pas ce que tu veux faire :
    ... et ce qui était avant le seul noeud va devenir le noeud gauche.
    Le seul noeud était celui pointé par arbre donc de type Noeud. Si tu veux le mettre à gauche (à gauche de lui-même ???), ce nest pas possible puisqu'à gauche tu ne peux mettre que des noeudG, pas des Noeud.

    C'est la cause de tes erreurs de compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    arbre->fg=arbre;  // noeudG * = Noeud * pas le même type
     
    arbre->fg=nd;     // noeudG * = Noeud * pas le même type

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Par défaut
    En fait à gauche, je veux juste mettre la valeur qui était dans le NOEUD->nb.

    Edit : il suffit juste de créer une variable de type *noeudG avec noeudG->nb=arbre->nb et c'est bon. A moins qu'il y ai possibilité de faire sans la variable...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Par défaut
    J'ai un autre problème (certainement lié aux pointeurs), en remplacement de ma dernière ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    arbre->nb=arbre->nb+nd->nb;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    printf("==%d/%d/%d==", arbre->nb, arbre->fg->nb, arbre->fd->nb);
    arbre->nb=(arbre->fd->nb) + (arbre->fg->nb);
    printf("==%d/%d/%d==", arbre->nb, arbre->fg->nb, arbre->fd->nb);
    Au début, je tombe sur ==5/2/5== et ensuite je tombe sur ==7/2/7==
    Comment se fait-il que la valeur de droite ai été modifiée ?

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Il faudrait le code actualisé après ta modif
    il suffit juste de créer une variable de type *noeudG avec noeudG->nb=arbre->nb et c'est bon.
    Mais la cause est sans doute liée à

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Par défaut
    Merci le problème venait exactement de là.

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. suppression d'un arbre binaire
    Par NomUtilisateurDejaPris dans le forum C
    Réponses: 11
    Dernier message: 16/02/2004, 10h05
  3. [Arbre binaire de Recherche]
    Par Giovanny Temgoua dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 06/02/2004, 11h45
  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