#include #include #include #include #define MAX_LETTRES 30 #define size 26 typedef struct node { char l; struct node * lettres[size]; bool fin_de_mot; } Node; bool is_empty(struct node *tree) { return tree==NULL; } bool is_leaf(struct node *tree) { int cpt=1; if (is_empty(tree)) return 1; for (int i=0; ilettres[i] == NULL){ cpt++; } } if (cpt == size) cpt=1; if (cpt != size) cpt=0; return cpt ; } void ajout(Node **N, char lettre) { Node *nouveau = malloc(sizeof(Node)); (*nouveau).l=lettre; (*nouveau).fin_de_mot=0; for (int i=0; ilettres[i]=NULL; *N = nouveau; } void ajout_alphab(Node ** pn, char * mot,int cpt) { Node * tmp= *pn; //printf("%d \n",cpt); char lettre=mot[cpt]; int pos = lettre - 'a'; //printf("%c \n",lettre); cpt++; if (lettre == '\0'){ (*tmp).fin_de_mot=1; return; } if (tmp->lettres[pos] == NULL) { //printf("Rentré \n"); ajout(&tmp->lettres[pos],lettre); } return ajout_alphab(&tmp->lettres[pos],mot,cpt); } Node * charger_arbre(Node ** Arbre){ FILE * dico; char mot[MAX_LETTRES]; dico = fopen("text.txt","r"); int i; while ((i = fscanf(dico,"%s",mot)) == 1){ ajout_alphab(Arbre,mot,0); } fclose(dico); return *Arbre; } void affichage_arbre(Node * Arbre) { if (Arbre->l == '?' && is_leaf(Arbre)){ printf("arbre vide \n"); return; } for (int i=0; ilettres[i] != NULL){ printf("%c -> %c \n",Arbre->l,Arbre->lettres[i]->l); affichage_arbre(Arbre->lettres[i]); } } if (Arbre->fin_de_mot) printf("fin de mot \n"); } void detruire_arbre(Node ** Arbre) { printf("---------- \n"); printf("%p \n",*Arbre); if (is_empty(*Arbre)) return; printf("%c \n",(*Arbre)->l); for (int i=0; ilettres[i]); } free(*Arbre); printf("suppression \n"); printf("%p \n",*Arbre); } void initialisation(Node ** Arbre){ Node *nouveau = malloc(sizeof(struct node)); (*nouveau).l='?'; for (int i=0; ilettres[i] = NULL; *Arbre = nouveau; } int main(){ Node * Arbre; initialisation(&Arbre); charger_arbre(&Arbre); affichage_arbre(Arbre); printf("Arbre fini \n"); detruire_arbre(&Arbre); affichage_arbre(Arbre); return 0; }