#include "arbres_binaires.h" #include SNoeud CreerFeuille(float valeur, char lettre) { SNoeud feuille; feuille.valeur = valeur; feuille.est_feuille = true; feuille.lettre = lettre; return feuille; } SNoeud_Array *CreerNoeudArray(valeur_lettre *t, int taille) { SNoeud_Array *tableau = malloc(sizeof(SNoeud_Array)); tableau->noeud = malloc(sizeof(SNoeud) * taille); tableau->taille = taille; for (int i = 0; i < taille; i++) { tableau->noeud[i] = CreerFeuille(t[i].valeur, t[i].lettre); } return tableau; } deux_Noeuds find2min(SNoeud_Array *tableau) { deux_Noeuds min; min.gauche = NULL; min.droite = NULL; int min1 = 0; int min2 = 0; for (int i = 0; i < tableau->taille; i++) { if (tableau->noeud[i].valeur < min1) { min2 = min1; min1 = tableau->noeud[i].valeur; min.droite = min.gauche; min.gauche = &tableau->noeud[i]; } else if (tableau->noeud[i].valeur < min2) { min2 = tableau->noeud[i].valeur; min.droite = &tableau->noeud[i]; } } return min; } SNoeud AssocierNoeud(SNoeud gauche, SNoeud droite) { SNoeud noeud; noeud.valeur = gauche.valeur + droite.valeur; noeud.est_feuille = false; noeud.gauche = &gauche; noeud.droite = &droite; return noeud; } SNoeud EtapeGlouton(SNoeud_Array *tableau) { deux_Noeuds min = find2min(tableau); SNoeud noeud = AssocierNoeud(*min.gauche, *min.droite); free(min.gauche); free(min.droite); return noeud; }