Vous êtes sur la page 1sur 5

Calcul de la taille d’un arbre binaire Calcul de la hauteur d’un arbre binaire

Par convention, on aura h( ) = 1.

procedure Taille(a)
if a est vide then procedure Hauteur(a)
return 0 if a est vide then
else return 1
tg Taille(Gauche(a)) else
td Taille(Droit(a)) hg Hauteur(Gauche(a))
return 1 + tg + td hd Hauteur(Droit(a))
end if return 1 + max(hg , hd )
end procedure end if
end procedure

Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 17/51 Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 18/51

Construction d’arbres binaires Construction d’un arbre équilibré à partir d’une liste
A partir d’une liste d’étiquettes, comment construire un arbre ?

Exemple pour 3 étiquettes


Structures possibles pour 3 étiquettes :
• • • • • procedure CreerArbreEquilibre(l)
if l est vide then
return
• • • • • • else
soient x la tête de l, et l 0 son reste
• • • • soit (l1 , l2 ) le couple de listes obtenu en séparant l en deux listes de
longueurs égales (à 1 près)
Pouvant être étiquetés de 3! = 6 manières di↵érentes chacun, pour 3 étiquettes
g CreerArbreEquilibre(l1 )
di↵érentes.
d CreerArbreEquilibre(l2 )
Un arbre est équilibré s’il est vide, ou bien si return creer(x, g , d)
end if
1 ses deux sous-arbres sont équilibrés ;
end procedure
2 et les tailles de ses deux sous-arbres ne di↵èrent que d’1 au plus
En corollaire, dans un arbre équilibré, la hauteur des sous-arbres gauche et droit
di↵ère au plus de 1.

Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 19/51 Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 20/51
Définition des arbres binaires de recherche Exemple
9

5
Definition
4
Un arbre binaire de recherche (ou ordonné) est un arbre vide, ou
un arbre binaire satisfaisant les trois conditions suivantes 3 4
1 l’élément étiquetant la racine de l’arbre est supérieur ou égal à
tous les éléments étiquetant les nœuds du sous-arbre gauche ; 2 3 5
2 l’élément étiquetant la racine de l’arbre est inférieur à tous les 1 1 9
éléments étiquetant les nœuds du sous-arbre droit ;
1 1 2
3 les deux sous-arbres sont eux-mêmes des arbres binaires de
recherche. 3

1 5

1 2 4 9

Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 21/51 Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 22/51

Est-ce un arbre binaire de recherche ? Propriétés d’un ABR


Require: un arbre binaire a
Ensure: Vrai si a est un ABR, Faux sinon
if a est vide then
return Vrai la plus petite étiquette se trouve dans le nœud le plus à
end if
if le sous-arbre gauche de a n’est pas un ABR then gauche de l’arbre
return Faux la plus grande étiquette se trouve dans le nœud le plus à
end if droite de l’arbre
if le sous-arbre droit de a n’est pas un ABR then
return Faux La recherche de la plus grande ou de la plus petite étiquette se fait
end if en O(h). Si l’arbre est équilibré alors c’est en ⇥(log(n)).
if la racine de a n’est pas supérieure à tous les éléments du sous-arbre
gauche then le parcours infixé d’un ABR aboutit à une liste croissante des
return Faux valeurs stockées aux nœuds de l’ABR.
end if
if la racine de a n’est pas inférieure à tous les éléments du sous-arbre droit
then
return Faux
end if
return Vrai
Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 23/51 Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 24/51
Recherche dans un ABR

procedure Rechercher(e, a)
Ensure: un sous-arbre de a dont la racine est étiquetée par e s’il en existe,
l’arbre vide sinon
if a est vide then
return
? Question else
r Racine(a)
if e = r then
return a
else
Où se trouve la valeur médiane dans un ABR ? if e  r then
return Rechercher(e,Gauche(a))
else
return Rechercher(e,Droit(a))
end if
end if
end if
end procedure

Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 25/51 Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 26/51

Recherche des valeurs extrêmes Insertion dans un ABR


Pour insérer dans un ABR il suffit de faire une recherche et
d’insérer à l’endroit où la recherche infructueuse nous a amené.
[Rappel] Soit a un ABR non vide.
1 la plus petite valeur des nœuds de a est dans le nœud le plus
à gauche de a. procedure Inserer(e, a)
if a est vide then
2 la plus grande valeur des nœuds de a est dans le nœud le plus return Creer(e, , )
à droite de a. else
soient r = racine(a), g = FilsGauche(a) et d = FilsDroit(a)
if e  r then
procedure EtiquetteMax(a) ag Inserer(e,g )
if le sous-arbre droit de a est vide then remplacer le fils gauche de a par ag
return Racine(a) return a
else else
return EtiquetteMax(FilsDroit(a)) ad Inserer(e,d)
end if remplacer le fils droit de a par ad
end procedure return a
end if
end if
end procedure

Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 27/51 Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 28/51
Construction d’un ABR
II Faisons le point

procedure Construire(l) les arbres sont des structures de données récursives


if l est vide then
return
les nœuds portent des étiquettes et possèdent une liste de fils
else ordonnés
soit x la tête de l et l 0 le reste de l la topologie des arbres n’est pas unique pour une liste
ar Construire(l 0 )
return Inserer(x,ar )
d’étiquettes
end if
end procedure les arbres binaires de recherche ajoutent une contrainte sur la
position des étiquettes dans l’arbre
cependant, la topolgie des ABR n’est pas fixée pour une liste
d’étiquettes, mais elle est fixée pour un ordre d’insertion donné
les ABR équilibrés permettent une recherche efficace en
O(log(n))
Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 29/51

Définitions complémentaires sur les arbres binaires


un arbre binaire complet est un arbre binaire dont tous les
nœuds internes possèdent exactement deux fils
un arbre binaire parfait est un arbre binaire complet pour
lequel toutes les feuilles sont à la même profondeur
un arbre binaire quasi parfait de hauteur h est un arbre binaire
Une nouvelle structure de données : le tas
tel que :
toutes les feuilles sont à profondeur h ou h 1,
dont tous les nœuds internes sauf eventuellement un à
profondeur h 1 possèdent deux fils,
et toutes les feuilles de profondeur h sont groupées à gauche.

Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 31/51


Tas
un tas max est un arbre binaire quasi-parfait dont la valeur
associée à chaque nœud est plus grande que celles de ses fils

9 9

8 5 8 3

2 1 3 2 1 5

propriétés :
la valeur la plus grande est située à la racine du tas
pas d’ordre entre les valeurs des fils d’un nœud (ce n’est pas
un arbre binaire ordonné !)
mais la seconde valeur maximale est nécessairement la valeur
d’un des deux fils de la racine
la hauteur d’un tas de taille n est h = blog2 nc
Université Lille 1, ASD, Licence Informatique S4 — Structures arborescentes 33/51