Bonjour,

J'ai un petit soucis en C, je dois faire un arbre binaire !
En C++ avec des classes je n'ai aucun soucis, mais ici je dois faire ça en C !
Je veux explique mon soucis:
Mon arbre binaire trie des personnes par ordre alphabétique, lorsque que j'ajoute mon premier membre, dans la fonction d'ajout tout se fait nikel, et lorsque que je sors de cette fonctionne, mon element reste null, comme si je n'avais rien fait ! je passe bien par pointeur, je ne comprends pas vraiment pourquoi ca ne fonctionne pas ! Voici mon code :


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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
struct s_personne {
	char* nom;
	char* prenom;
	struct s_personne* gauche;
	struct s_personne* droite;
	struct s_livre *livre;
};
 
struct s_livre {
	char* nom;
	char* date;
	struct s_livre *next;
};
 
void ajouter_membre(struct s_personne* base, char* nom, char* prenom);
void afficher(struct s_personne* base);
void ajouter_livre(struct s_personne* membre, char* nomLivre, char* date);
int moyenne_livre(struct s_personne* base);
 
void main() {
	struct s_personne* base;
	base = NULL;
	printf("1\n");
	afficher(base);
	printf("2\n");
	ajouter_membre(base, "Jean-Guy", "Toto");
	printf("3\n");
	afficher(base);
}
 
void ajouter_membre(struct s_personne* base, char* nom, char* prenom) {
	int nbr, nbr2;
	struct s_personne test;
	// Si l'element n'existe pas, on le créé
	printf("20\n");
	if (base==NULL) {
		printf("21\n");
		base = (struct s_personne*) malloc(sizeof(struct s_personne));
		printf("211\n");
		base->nom = (char*) malloc(sizeof(nom)*sizeof(char));
		strcpy(base->nom, nom);
		printf("212\n");
		base->prenom = (char*) malloc(sizeof(prenom)*sizeof(char));
		strcpy(base->prenom, prenom);
		base->gauche=NULL;
		base->droite=NULL;
		base->livre=NULL;
		printf("213");
	} else {
		printf("22\n");
		// Sinon on compare les noms
		nbr = strcmpi(base->nom, nom);
		// Ajout a gauche : comparaison négative
		if (nbr < 0) {
			ajouter_membre(base->gauche, nom, prenom);
		}
		printf("23\n");
		// Ajout a droite : comparaison positive
		if (nbr > 0) {
			ajouter_membre(base->droite, nom, prenom);
		}
		printf("24\n");
		// Les noms sont identique
		if (nbr == 0) {
			// On compare les prénoms
			nbr2 = strcmpi(base->prenom, prenom);
			// Ajout a gauche : comparaison négative
			if (nbr2 < 0) {
				ajouter_membre(base->gauche, nom, prenom);
			}
			// Ajout a droite : comparaison positive
			if (nbr2 > 0) {
				ajouter_membre(base->droite, nom, prenom);
			}
			// Prénoms aussi identique: erreur ! on ne fait rien
			if (nbr2 == 0) {
				printf("Erreur, le nom et le prenom existent deja");
			}
		}
	}
}
 
void afficher(struct s_personne* base) {
	struct s_livre* livre;
	printf("11\n");
	if (base != NULL) {
		printf("12\n");
		if (base->gauche != NULL) {
			afficher(base->gauche);
		}
		printf("13\n");
		printf("Nom : %s - Prenom: %s\n", base->nom, base->prenom);
		livre = base->livre;
		// Affichage des livres tant que next != null
		while(livre != NULL) {
			printf("-> Livre : nom: %s - date: %s", livre->nom, livre->date);
			// On définit le livre suivant => livre->next
			livre = livre->next;
		}
		if (base->droite != NULL) {
			afficher(base->droite);
		}
		printf("14\n");
	}
	printf("15\n");
}
Faites pas trop attention aux printf c'est juste pour vérifier par où il passe !
Voici le résultat de l'execution:

1
11
15
2
20
21
211
212
2133
11
15

Merci d'avance pour votre aide !