
Fabrication - Code récursif
Cet algorithme s’exprime facilement de façon récursive
procedure Fabriquer_maximier(C : Curseur)
Begin
if not Est_Vide(sag(X)) then begin
G := X; G := sag(G) ;
Fabriquer_maximier(G) ;
end; // if
if not Est_Vide(sad(X)) then begin
D := X; D := sad(D) ;
Fabriquer_maximier(D);
end; // if
// on a maintenant un pré-maximier
Reorganiser(C);
End ; // Fabriquer_maximier
SDC - Licence – p.13/32
Fabrication - Code itératif
Cet algorithme peut aussi s’exprimer (informellement) de façon itérative
par
for h := 2 to hauteur(arbre) do begin
Réorganiser tous les sous-arbres de hauteur h ;
end; // for
Mais l’interface d’arbre proposée jusqu’ici ne permet
pas d’implémenter aisément cette version itérative,
faute de moyen efficace pour parcourir tous les
sous-arbres d’une hauteur donnée.
SDC - Licence – p.14/32
Tri-Arbre : Heapsort
L’utilisation des maximiers peut amener à une méthode de tri appelée
Tri-arbre ou Heapsort.
Description informelle de l’algorithme :
Tri_Arbre(var T : Tableau)
Begin
Constituer un arbre contenant les valeurs de T;
Fabriquer un maximier à partir de cet arbre;
for i:=low(T) to high(T) do begin
Ranger le maximum dans T[i] ;
Retirer le maximum de l’arbre ;
end;// for
End ;// Tri_Arbre
En pratique, cette méthode de tri est employée dans le
cas d’une implémentation d’arbre bien particulière : le tas.
SDC - Licence – p.15/32
La structure de Tas
➻La structure de tas permet de représenter, dans un tableau, un arbre
quasi-équilibré, dont les feuilles à profondeur maximale sont situées
le plus à gauche possible.
➻Elle consiste à ranger les valeurs portées par les nœuds
➠par profondeur croissante
➠de gauche à droite (pour une profondeur donnée).
un arbre = un tableau
un curseur = un indice du tableau
un nœud = une case du tableau
SDC - Licence – p.16/32
Tas - Exemple
23216
5736
7 8
9
897 637523216
1 2 3 4 5 6 7 8 9 10 11 12
SDC - Licence – p.17/32
Tas dans 1 tableau d’indices 1..n
T(8) T(9) T(10) T(11) T(12)
T(4) T(5) T(6) T(7)
T(2) T(3)
T(1)
Racine
Successeur gauche
Successeur droite
Prédecesseur
Est_Feuille
Possède 2 successeurs
Possède 1 seul successeur
Dernier nœud interne
SDC - Licence – p.18/32