examen fini
This commit is contained in:
67
examen/T2/arbres_binaires.c
Normal file
67
examen/T2/arbres_binaires.c
Normal file
@@ -0,0 +1,67 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user