Salut, je dois realiser un prog avec un arbre quelconque à 3 branches. Je bloque sur l'ajout de nouveau noeud aux branches (gauche droite et centre) je ne vois pas comment déplacer le pointeur à ces branches pour l'ajout du noeud. J'adorerai avoir une petite explication. Voilà mon bout de code3 (ça ce passe dans la methde ajouter noeud). Merci d'avance dans tous les cas.

source cpp
Code c++ : 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
 
#include "Noeud.h"
 
Arbre::Arbre()
{
    m_pRacine = m_pCourant = NULL;
    m_nbNoeud = 0;
}
 
int Arbre::ajouterPremierNoeud(int data)
{
    Noeud * pNouveau = new Noeud(data); //creation d'un nouveau noeud
 
    if(pNouveau==NULL) //si plus de memoire retourne 0
        return 0;
 
    pNouveau->m_pPere = m_pRacine; // m_pPere prend l'adresse de m_pRacine
    m_pRacine = pNouveau; //le pointeur m_pRacine recupere le neoud pNouveau
 
    m_nbNoeud++; //un nouveau noeud est nee
 
    return 1; //tout c'est bien passe retourne 1
}
 
int Arbre::ajouterNoeud(int data)
{
    if(m_nbNoeud==0)//si le nombre de noeud est egal a zeros alors le premier noeud est le sommet de laborescance
        return ajouterPremierNoeud(data); // cree le premier noeud et on quitte la methode
 
    if(pNouveau->m_pBrancheGauche==NULL) // si la branche de gauche est vide on remplis celle la
    {
        Noeud * pNouveau = new Noeud(data); //sinon on cree un nouveau noeud avec la donee
        if(pNouveau == NULL) // si plus de memoire
            return 0;
 
        m_nbNoeud++;
        return 1;
    }
 
    else if(pNouveau->m_pBrancheCentre==NULL) // si la branche de gauche est prise est celle du centre ne l'est pas on la remplis
    {
        Noeud * pNouveau = new Noeud(data); //sinon on cree un nouveau noeud avec la donee
        if(pNouveau == NULL) // si plus de memoire
            return 0;
 
        m_nbNoeud++;
        return 1;
    }
 
    else // sinon on remplis celle de droite
    {
        Noeud * pNouveau = new Noeud(data); //sinon on cree un nouveau noeud avec la donee
        if(pNouveau == NULL) // si plus de memoire
            return 0;
 
        m_nbNoeud++;
        return 1;
    }
}

.h

Code c++ : 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
 
#ifndef NOEUD_H_INCLUDED
#define NOEUD_H_INCLUDED
#include <stdlib.h>
 
class Arbre;
 
class Noeud
{
   friend class Arbre;
 
   private :
 
       int m_data;                    // Les données génériques du noeud.
       Noeud * m_pPere;               // Le
       Noeud * m_pBrancheGauche;      //pointeur de la branche de gauche
       Noeud * m_pBrancheCentre;      //pointeur de la branche central
       Noeud * m_pBrancheDroite;      //pointeur de la branche de droite
 
       Noeud( int & data){ m_data = data; m_pBrancheGauche = m_pBrancheCentre = m_pBrancheDroite = m_pPere = NULL;} // Constructeur Initialisation.
};
 
class Arbre
{
    private:
 
    Noeud* m_pRacine;  //La racine de l'abre
    Noeud* m_pCourant; //L'endroit ou se trouve le pointeur
    int m_nbNoeud;     //Le nombre de noeud dans l'arborescance
 
    public:
        Arbre();
        inline ~Arbre();
 
 
        void detruire_arbre(Noeud * arbre);
        void viderArbre();
 
        int ajouterPremierNoeud( int data);
        int ajouterNoeud( int data);
 
        void parcours_prefixe();
        void parcours_infixe();
        void parcours_suffixe();
 
        int ajouterGauche();
        int ajouterCentre();
        int ajouterDroite();
};
 
#endif // NOEUD_H_INCLUDED