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
| #include <stdlib.h>
struct t_arbre
{
int e;
struct t_arbre *d;
struct t_arbre *g;
};
typedef struct t_arbre t_arbre;
void afficherArbre( t_arbre *arbre );
void ajouterValeur( t_arbre *mon_arbre, int valeur );
void creerNoeud( t_arbre *arbre, int valeur );
int main (void)
{
t_arbre *arbre=NULL;
ajouterValeur( arbre, 5 );
afficherArbre( arbre );
ajouterValeur( arbre, 4 );
ajouterValeur( arbre, 6 );
ajouterValeur( arbre, 5 );
ajouterValeur( arbre, 3 );
ajouterValeur( arbre, 7 );
ajouterValeur( arbre, 8 );
afficherArbre( arbre );
free(arbre);
return 0;
}
void creerNoeud( t_arbre *arbre, int valeur )
{
t_arbre *noeud = (t_arbre *)malloc(sizeof(t_arbre));
noeud->e = valeur;
noeud->g = NULL;
noeud->d = NULL;
arbre=noeud;
printf("\n\n @arbre-> : %d\n @noeud : %d\nvaleur : %d\n @g : %d\t @d : %d", arbre, noeud, noeud->e, noeud->g, noeud->d);
printf("4");
}
void ajouterValeur( t_arbre *arbre, int valeur )
{
printf("ajouter");
// Si l'arbre est vide, on crée l'élément
if ( arbre == NULL )
{
printf("1");
creerNoeud( arbre, valeur );
}
// Si la valeur à insérer est inférieur à celle du noeud courant
if ( arbre->e > valeur )
{
printf("2");
// On regarde si son fils gauche est libre
if ( arbre->g == NULL )
{
// Si c'est le cas, on crée le nouveau noeud sur le fils gauche du noeud précédent
creerNoeud( arbre->g, valeur );
}
// Sinon on rappelle la fonction sur le noeud fils de gauche
else ajouterValeur( arbre->g, valeur );
}
// Si la valeur à insérer est supérieure à celle du noeud courant
if ( arbre->e < valeur )
{
printf("3");
// On regarde si son fils droit est libre
if ( arbre->d == NULL )
{
// Si c'est le cas, on crée le nouveau noeud sur le fils droit du noeud précédent
creerNoeud( arbre->d, valeur );
}
// Sinon on rappelle la fonction sur le noeud fils de droite
else ajouterValeur( arbre->d, valeur );
}
}
void afficherArbre( t_arbre *arbre )
{
if ( arbre != NULL )
{
printf("\n\n @noeud : %d\n valeur : %d\n @g : %d\t @d : %d", arbre, arbre->e, arbre->g, arbre->d);
if ( arbre->g != NULL || arbre->d != NULL )
{
afficherArbre(arbre->g);
afficherArbre(arbre->d);
}
}
} |
Partager