Bonjour,

J'essaye de rajouter des élément dans un arbre binaire mais je rencontre quelques problèmes.

En effet, je n'arrive qu'a remplir le premier fils droit et fils gauche. Je dois renvoyer une fois la valeur insérée le mauvais pointeur car celui repart toujours de la racine. Mais je ne vois pas comment modifier le problème.

Merci d'avance.

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
#include <stdlib.h>
 
struct element
{
    int val;
    struct element *d;
    struct element *g;
};
 
typedef struct element arbre;
 
void afficherArbre( int i, arbre *arbre );
arbre *AjouterNoeud( arbre *monarbre, int valeur );
 
int main (void)
{
    arbre *mon_arbre=NULL;
    mon_arbre = AjouterNoeud( mon_arbre, 1 );
    mon_arbre = AjouterNoeud( mon_arbre, 2 );
    mon_arbre = AjouterNoeud( mon_arbre, 3 );
    mon_arbre = AjouterNoeud( mon_arbre, 8 );
    mon_arbre = AjouterNoeud( mon_arbre, 9 );
    afficherArbre( 0,mon_arbre );
    return 0;
}
 
arbre *AjouterNoeud( arbre *mon_arbre, int valeur )
{
    if ( mon_arbre == NULL )
    {
        arbre *noeud = (arbre *)malloc(sizeof(arbre));
 
        noeud->val=valeur;
        noeud->g=NULL;
        noeud->d=NULL;
 
        return noeud;
    }
 
    else
    {
        if ( mon_arbre->val > valeur )
        {
            arbre *noeud = (arbre *)malloc(sizeof(arbre));
            arbre *arbre_temporaire = mon_arbre;
 
            noeud->val=valeur;
            noeud->g=NULL;
            noeud->d=NULL;
 
            arbre_temporaire->d = noeud;
 
            return mon_arbre;
        }
 
        else
        {
            arbre *noeud = (arbre *)malloc(sizeof(arbre));
            arbre *arbre_temporaire = mon_arbre;
 
            noeud->val=valeur;
            noeud->g=NULL;
            noeud->d=NULL;
 
            arbre_temporaire->g = noeud;
 
            return mon_arbre;
        }
    }
}
 
void afficherArbre( int i, arbre *arbre )
{
    if ( arbre != NULL )
    {
        printf("\n hauteur %d : %d", i, arbre->val);
        i++;
 
        if ( arbre->g != NULL || arbre->d != NULL )
        {
            afficherArbre( i, arbre->g);
            afficherArbre( i, arbre->d);
        }
    }
 
    else printf("\n arbre vide");
}