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
| noeud_t *creer_fils(noeud_t *n,const char c){
unsigned idx = char2index(c);
if (!n->fils[idx]){
n->fils[idx] = creer_noeud(c); // nouveau fils
}
return n->fils[idx];
}
// Ajoute un mot dans l'arbre étant donné sa racine
void ajouter_mot(arbre_t *a,const char *s){
unsigned i,idx_cur,n = strlen(s);
noeud_t *noeud_cur = a;
for(i=0;i<n;++i){
idx_cur = char2index(s[i]);
noeud_cur = creer_fils(noeud_cur,s[i]);
}
creer_fils(noeud_cur,'\0');
}
// Supprime tout le sous arbre à partir d'un noeud n
void supprimer_sous_arbre(noeud_t *n){
unsigned i;
for(i=0;i<=NB_CARACTERE;++i){
if (n->fils[i]) supprimer_sous_arbre(n->fils[i]);
free(n->fils[i]);
}
free(n->fils);
}
// Supprime un arbre étant donné sa racine
void supprimer_arbre(arbre_t *a){
supprimer_sous_arbre(a);
}
// Recherche si un mot figure dans un dictionnaire
int trouver_mot(const arbre_t *a,const char *s){
unsigned i,idx_cur,n = strlen(s);
const noeud_t *noeud_cur = a;
for(i=0;i<n;++i){
idx_cur = char2index(s[i]);
if(!noeud_cur->fils[idx_cur]) return 0;
else noeud_cur = noeud_cur->fils[idx_cur];
}
return 1;
}
void ajoute_medor(arbre_t *a,const char *s){
printf("ajoute le mot %s",s);
ajouter_mot(a,"tapir");
}
void cherche_medor(const arbre_t *a,const char *s){
int trouve = trouver_mot(a,s);
printf("est ce que le dictionnaire contient %s ? %i\n",s,trouve);
}
int main(){
arbre_t *a = creer_arbre();
printf("1) ajoute les mots\n");
ajoute_medor(a,"tapir");
ajoute_medor(a,"tapis");
ajoute_medor(a,"tapisser");
printf("2) cherche les mots\n");
cherche_medor(a,"tapir");
cherche_medor(a,"tapis");
cherche_medor(a,"plop");
printf("3) supprime l'arbre\n");
supprimer_arbre(a);
return 0;
} |
Partager