Recherche dichotomique dans un arbre
Résolu/Fermé
A voir également:
- Arbre dichotomique
- Arbre généalogique famille michelin - Télécharger - Généalogie
- Arbre genealogique windsor - Télécharger - Généalogie
- L'arbre Généalogique de la famille - Télécharger - Généalogie
- Glandier arbre - Forum Logiciels
- Arbre à clochette 99000 ✓ - Forum Jeux vidéo
2 réponses
mamiemando
Messages postés
33372
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 novembre 2024
7 802
Modifié le 10 févr. 2022 à 14:47
Modifié le 10 févr. 2022 à 14:47
Bonjour,
Merci d'indenter ton code correctement (voir ton premier message que j'ai corrigé). Un petit merci et une petite explication du problème serait également la moindre des choses.
Explication brève
En C, un test d'égalité s'écrit
Explication détaillée
Le compilateur ne s'en plaindra pas (au mieux il mettra un warning), car une affectation retourne la valeur affectée. Et en C un test est toujours vrai sauf si sa valeur est
Donc ici, ton premier test assigne la valeur
Ainsi ton code, une fois corrigé, devient :
Bonne chance
Merci d'indenter ton code correctement (voir ton premier message que j'ai corrigé). Un petit merci et une petite explication du problème serait également la moindre des choses.
Explication brève
En C, un test d'égalité s'écrit
==et non
=(qui est l'opérateur qui sert à assigner une valeur à une variable).
Explication détaillée
Le compilateur ne s'en plaindra pas (au mieux il mettra un warning), car une affectation retourne la valeur affectée. Et en C un test est toujours vrai sauf si sa valeur est
0(ou
NULLqui en réalité est une constante qui vaut
0).
Donc ici, ton premier test assigne la valeur
NULLà
R(quelle que soit la valeur de
Rreçue en paramètre). Ce test est donc toujours faut. Ensuite on évalue le test suivant, et on applique l'opérateur
->à
Rqui vaut désormais
NULL, ce qui provoque une erreur de segmentation.
Ainsi ton code, une fois corrigé, devient :
arbre rechDich(arbre R, int x) { if (R == NULL) { return NULL; } else if (R->info == x) { return R; } else if (R->info > x) { return rechDich(R->fd, x); } else { return rechDich(R->fg, x); } }
Bonne chance
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
9 févr. 2022 à 23:13
9 févr. 2022 à 23:13
Moi non plus, d'ailleurs je ne sais pas ce que le code est sensé faire!
Une piste quand même : pour faire les tests d'égalité l'opérateur à utiliser est
Une piste quand même : pour faire les tests d'égalité l'opérateur à utiliser est
==. Mais le compilateur a déjà dû te signaler le problème au moment de la compilation.
10 févr. 2022 à 15:19