Recherche dichotomique dans un arbre

Résolu/Fermé
layar - Modifié le 10 févr. 2022 à 14:47
 layar - 10 févr. 2022 à 15:19
Bonjour,

Je n'ai pas trouvé l'erreur :

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);
    }
}

2 réponses

mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
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
==
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
NULL
qui 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
R
reçue en paramètre). Ce test est donc toujours faut. Ensuite on évalue le test suivant, et on applique l'opérateur
->
à
R
qui 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
1
merciii beaucoup
0
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
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
==
. Mais le compilateur a déjà dû te signaler le problème au moment de la compilation.
0
Faire la recherche dichotomique d’une valeur dans une arbre binaire
0