Bonjour, j'aimerais vous demander ce qui provoque ce problème


Je ne vais pas spécialement entrer dans le détail du code.
J'ai fait une structure de type arbre et j'ai testé quelques fonctions en séquence, vérifier si un arbre est vide, ajouter des valeurs dans l'arbre et afficher les valeurs de l'abre trié.

Tout fonctionnait bien, sur chaque fonction en séquence

en gros

ajouter(arbre,2)
ajouter(arbre,1)
ajouter(arbre,5)

en lançant la fonction de tri j'obtiens bien 1,2,5


J'ai alors voulu passer sur un switch pour laisser le choix à l'utilisateur de l'opération qu'il souhaite traiter; mais à ma grande surprise, lorsque je choisis l'affichage de l'arbre trié, rien ne se passe.


Deux solution, soit l'arbre est vide et donc ma fonction d'ajout ne marche pas.
Soit l'arbre n'est pas vide, ma fonction d'ajout marche mais l'affichage en triant ne marche pas.

Mais dans tout les cas elles fonctionnent en dehors du switch; du coup je comprends pas...

Voilà le main qui à priori fonctionne bien.

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
 
int main()
{
	GRD arbre;
	int choix;
	int valeur;
	char continuer='o';
	arbre=creerVideGRD();
	while(continuer=='o')
	{
		printf("Choix Menu:\n");
		printf("1-Ajout d'une valeur dans l'arbre\n");
		printf("2-Tester si l'arbre est vide\n");
		printf("3- Afficher un arbre trié\n");
		printf("\nVotre choix: ");
		scanf("%d",&choix);
 
		switch(choix)
		{
			case 1:
			printf("Valeur à ajouter dans l'arbre: \n");
			scanf("%d",&valeur);
			ajouteEntier(arbre,valeur);
			break;
 
			case 2:
			if(estVideGRD(arbre))
			{
				printf("L'arbre est vide\n");
			}
			else
			{
				printf("L'arbre n'est pas vide\n");
			}
			break;
 
			case 3:
				triGRD(arbre);
			break;
 
			default:
			printf("Choix non valide\n");
			break;
		}
		printf("Voulez vous continuer le traitement o/n ?\n");
		continuer=getchar(); /*on vide le buffer*/
		scanf("%c",&continuer);
	}
	return 0;
}
Ainsi que la fonction de tri et d'ajout

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
GRD ajouteEntier(GRD a, int nb)
{
	feuille *aux=malloc(sizeof(feuille));
	assert(aux!=NULL);
	if(estVideGRD(a))
	{
		aux->gauche=NULL;
		aux->val=nb;
		aux->droite=NULL;
		return aux;
	}
	if(nb > a->val)
	{
		a->droite=ajouteEntier(a->droite,nb);
	}
	else
	{
		a->gauche=ajouteEntier(a->gauche,nb);
	}
	return a;
}
 
void triGRD(GRD a)
{
	if(!estVideGRD(a))
	{
		triGRD(a->gauche);
		printf("%d\n",a->val);
		triGRD(a->droite);
	}
}

EDIT



Pour être tout à fait complet je vous mets quand même la structure

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
typedef struct unfeuille {
	int val;
	struct unfeuille *gauche;
	struct unfeuille *droite;
}feuille;
 
typedef struct unfeuille * GRD;



EDIT 2: Pardon problème résolu, dans mon main je n'affectais pas la nouvelle valeur de l'arbre --' DU coup je travaillais toujours sur l'arbre vide...vous pouvez jeter vos tomates^^

Encore désolé !!!