Je disais que comme ta fonction "Appartient()" répond en binaire , oui/non, elle devrait etre typée bool. c'est bien plus cohérent qu'un int qui donne des valeurs multiples. C'est juste un conseil.
Ta structure Arbre est comme j'avais cru la deviner, c'est à dire très curieuse.
Déja tu es conscient que c'est pas un "arbre", mais un noeud, puisque tu l'as nommé comme cela. Et ensuite tu appelles "Arbre" un pointeur sur un noeud c'est ce que j'avais pas compris, car c'est vraiment pas standard comme facon de nommer.
typedef struct noeud {
char lettre;
struct noeud *fils, *freredroit, *freregauche;
} SNoeud, *PSNoeud;
A mon avis le type PSNoeud n'apporte rien de plus.
L'Arbre lui doit se trouver ailleurs dans ton programme, puisque c'est l'ensemble des noeuds. Ca doit etre un tableau de noeuds que tu réserves en mémoire d'une façon ou d'une autre.
Ce que je trouve curieux, c'est le contenu de la structure. Tu réserves un seul caractère "lettre", et 3 pointeurs. Donc pour stocker une seule lettre d'un mot qui tient sur 1 octet, tu reserves 13 octets. Et comme il y aura forcement un alignement de case mémoire entre le char et les pointeurs, la place reservée sera de 14 ou plus surement 16 octets !
Mise à part la perte énorme de place, je ne comprends pas comment sont stockés les mots dans un arbre bati sur cette structure. (il semblerait que ce soit les noeuds fils )
int i = 0;
while ( i < strlen(mot) ) {
if ( (mot[i]=='\0') || (a->Lettre=='\0') ) return 1;
else return 0;
if ( mot[i]==a->Lettre ) return Appartient(a->fils,mot);
else if ( mot[i] < a->Lettre ) return Appartient(a->freregauche,mot);
else return Appartient(a->freredroit,mot);
}
Où est incrémenté "i" ? A quoi sert le "while" puisque dans tous les cas testé on execute un "return" ?
La 2eme partie (rouge), n'est jamais accédée. Normalement ton compilateur aurait du te le dire (en warning)
Message édité par cmoila le 11-11-2006 à 19:24:46