langage_C/examen/T2/arbres_binaires.c
2023-04-05 13:24:47 +02:00

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;
}