/* Insertion d'un mot dans l'arbre ******************************************/
/* (on respecte l'ordre lexicographique des freres)**************************/
-NOEUD *_insere(NOEUD * p, char *mot, int i)
+NOEUD *insere(NOEUD * p, char *mot, int i)
{
/* i est l'indice de la lettre courante dans le mot */
if (p == NULL) {
return insere_fin(mot, i);
+ } else if (p->lettre == mot[i]) {
+ if (mot[i]) {
+ p->fils = insere(p->fils, mot, i + 1);
+ } else {
+ printf("The word is already here\n");
+ }
+ } else if (p->lettre > mot[i]) {
+ NOEUD *p1 = insere_fin(mot, i);
+ p1->frere = p;
+ p = p1;
+ } else {
+ p->frere = insere(p->frere, mot, i);
}
- if (mot[i] > p->lettre) {
- return _insere(p->frere, mot, i);
- } else if (mot[i] == p->lettre) {
- return _insere(p->fils, mot, i + 1);
- } else if (mot[i] < p->lettre) {
- return _insere(p->fils, mot, i);
- }
-}
-
-NOEUD *insere(NOEUD * p, char *mot, int i)
-{
- p = _insere(p, mot, i);
return p;
}
+
/*****************************************************************************/
/* Affichage par ordre alphabetique de tous les mots stockes dans l'arbre */
void affiche(NOEUD * p, char *mot, int i)
/* Visualisation de l'arbre n-aire *******************************************/
void affiche_arbre(NOEUD * p, int prof)
-/* prof est utilise pour decaller l'affichage avec des espaces (selon le niveau dans l'arbre) */
+/* prof est utilise pour decaller l'affichage avec des espaces (selon le niveau dans l'arbre) */
{
int i;
NOEUD *supprime(NOEUD * p, char *mot, int i)
/* i est l'indice de la lettre courante dans le mot */
{
- /* TODO */
- return p;
+ if (p) {
+ if (p->lettre < mot[i]) {
+ p->frere = supprime(p->frere, mot, i);
+ } else if (p->lettre == mot[i]) {
+ p->fils = supprime(p->fils, mot, i + 1);
+ if (!p->fils) {
+ NOEUD *p1 = p;
+ p = p->frere;
+ free(p1);
+ }
+ return p;
+ }
+ }
}
/* Destruction des arbres de racine p en recuperant la place occupee (free) par chacun des noeuds */
if (recherche(arbre, "salut", 0))
printf("mot \"salut\" present\n");
sauve_dico(arbre, "dictionnaire_debug", nb_mots);
+ supprime(arbre, "zazou", 0);
+ affiche_arbre(arbre, 0);
detruis_arbre(arbre);
if (!arbre)
affiche_arbre(arbre, 0);