68 lines
1.6 KiB
C
68 lines
1.6 KiB
C
#include "arbres_binaires.h"
|
|
#include <stdio.h>
|
|
|
|
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;
|
|
}
|