diff --git a/arbre.c b/arbre.c index 0c9c785..38c6e31 100644 --- a/arbre.c +++ b/arbre.c @@ -1,7 +1,32 @@ #include "arbre.h" void convertisseurListeEnArbre(Liste *liste) { + Cellule *curseur = *liste; + while (curseur != NULL) { // parcours de la liste + if (curseur->suivant != NULL) { // on créer un mini-arbre qu'on colle au reste de l'arbre seulement si le suivant existe + Cellule *nouvelleCellule; + if ((nouvelleCellule = (Cellule*)malloc(sizeof(Cellule))) == NULL) { // on alloue de la mémoire pour notre nouvelle cellule (mini-racine) + printf("Impossible d'allouer de la mémoire supplémentaire.\n"); // gestion de l'erreur + exit(1); + } + /* TODO: TROUVER UN ENDROIT Où FREE CETTE NOUVELLE CELLULE A L'AVENIR */ + nouvelleCellule->gauche = curseur; // membre gauche = curseur + nouvelleCellule->droite = curseur->suivant; // membre droit = élément suivant dans la liste + nouvelleCellule->lettre = '\0'; + nouvelleCellule->frequence = nouvelleCellule->gauche->frequence + nouvelleCellule->droite->frequence; + + curseur = curseur->suivant->suivant; // on va au suivant 2x car on a déjà ajouté le suivant en tant que membre droit + + /* TODO: FUITE ICI ?? */ + *liste = curseur; // on change le point de départ de notre liste pour ne pas traiter en boucle les anciennes cellules + ajouterRangee(liste, nouvelleCellule); // on ajoute à la liste notre nouvelle cellule + curseur = *liste; // on met à jour le curseur + } else { // cas du dernier élément + *liste = curseur; + curseur = curseur->suivant; + } + } } void encode(FILE *entree, FILE *sortie) {