Académique Documents
Professionnel Documents
Culture Documents
ARBRES BINAIRES DE
RECHERCHE
Membres : Professeur :
MEMEL Akpa Joel M. OUATTARA Soma
OUEDRAOGO Ismael
OURA Max-Joel
ROUDO Yves
ZOUGOURI Elsa
1. Recherche
La recherche d’une valeur dans un ABR consiste, en partant de la racine, à parcourir une
branche en descendant chaque fois sur le fils gauche ou sur le fils droit selon que la clé
portée par le nœud est plus grande ou plus petite que la valeur cherchée. La recherche
s’arrête d`es que la valeur est rencontrée ou que l’on a atteint l’extrémité d’une branche (le
fils sur lequel il aurait fallu descendre n’existe pas).
1
Algorithme de recherche
Recherche d’une valeur k à partir d’un nœud x d’un ABR :
2. Minimum et maximum
Pour accéder à la clé la plus petite (resp. la plus grande) dans un ABR, il suffit de
descendre sur le fils gauche (resp. Le fils droit) autant que possible. Le dernier nœud
visité qui n’a pas de fils gauche (resp. Fils droit), porte la valeur la plus petite (resp. la
plus grande) de l’arbre.
Algorithme Minimum
Recherche du minimum à partir d’un nœud x d’un ABR :
Algorithme Maximum
Par symétrie :
2
3. Les prédécesseurs et successeurs dans un arbre binaire de
recherche :
a) Les prédécesseurs
Dans un arbre binaire de recherche dont toutes les clés des nœuds sont distinctes, le
prédécesseur d’un nœud est le nœud ayant la plus grande clé inférieure à celle de ce
nœud.
Dans le cas où le nœud x a un enfant de gauche, on sait que les nœuds appartenant
au sous arbre de racine gauche[x] ont tous une clé inférieure à celle du nœud x. Par
conséquent, le prédécesseur du nœud x est le maximum de ce sous arbre.
Dans le cas où le nœud x n’a pas d’enfant de gauche, on va initialiser une variable y
à père[x] et tant que y sera différent de nil et que x sera l’enfant de gauche de y, on
affectera y à x puis père[x] à y. Lorsqu’on sortira de cette boucle, la valeur de y sera
le prédécesseur de x ou Nil si ce dernier n’en a pas.
Exemples :
3
Pseudo – code :
b) Les successeurs
Dans un arbre binaire de recherche dont toutes les clés des nœuds sont distinctes, le
successeur d’un nœud est le nœud ayant la plus petite clé supérieure à celle de ce
nœud.
Dans le cas où le nœud x a un enfant de droite, on sait que les nœuds appartenant au
sous arbre de racine droite[x] ont tous une clé supérieure à celle du nœud x. Par
conséquent, le successeur du nœud x est le maximum de ce sous arbre.
Dans le cas où le nœud x n’a pas d’enfant de droite, on va initialiser une variable y à
père[x] et tant que y sera différent de nil et que x sera l’enfant de droite de y, on
affectera y à x puis père[x] à y. Lorsqu’on sortira de cette boucle, la valeur de y sera
le successeur de x ou Nil si ce dernier n’en a pas
Exemples :
4
Le successeur du nœud de clé 15 est celui de clé 17.
Le successeur du nœud de clé 12 est celui de clé 13.
Le nœud de clé 21 n’a pas de prédécesseur.
Le successeur du nœud de clé 14 est celui de clé 15.
Pseudo – code :
5
Exemple :
6
Cas d’une feuille
Le nœud à supprimer n’a pas de fils : on l’élimine simplement de l’arbre en
modifiant le lien de son père. Si le père n’existe pas, l’arbre devient l’arbre vide.
7
Cas d’un unique fils
Le nœud à supprimer a un unique fils : on détache le nœud et on relie directement
son père et son fils. Si ce père n’existe pas, l’arbre est réduit au fils unique du nœud
supprimé.
8
IV. ARBRE AVL
1. Définition
En informatique théorique, les arbres AVL ont été historiquement les
premiers arbres binaires de recherche automatiquement équilibrés. Dans
un arbre AVL, les hauteurs des deux sous-arbres d'un même nœud
diffèrent au plus de 1 . La recherche, l'insertion et la suppression sont
toutes en dans le pire des cas. L'insertion et la suppression
nécessitent d'effectuer des rotations.
La dénomination « arbre AVL » provient des noms respectifs de ses deux
inventeurs, respectivement Georgii Adelson-Velsky (en) et Evguenii
Landis (en), qui l'ont publié en 1962 sous le titre An Algorithm for the
Organization of Information1.
Le facteur d'équilibrage d'un nœud est la différence entre la hauteur de
son sous-arbre droit et celle de son sous-arbre gauche. Un nœud dont le
facteur d'équilibrage est 1, 0, ou -1 est considéré comme équilibré. Un
nœud avec tout autre facteur est considéré comme déséquilibré et requiert
un rééquilibrage. Le facteur d'équilibrage est soit calculé à partir des
hauteurs respectives des sous-arbres, soit stocké dans chaque nœud de
l'arbre (ce qui permet un gain de place, ce facteur pouvant être stocké sur
deux bits, mais complexifie les opérations d'insertion et de suppression).
9
Fe(n) = (hauteur du sous arbre droit) – (hauteur du sous arbre
gauche).
Un arbre est équilibré si tout nœud n, Fe(n) = -1, 0 ou +1.
Pour rééquilibrer un nœud, on exploite les rotations.
3. Rotations
Il existe deux types de rotation qui sont :
Rotation simple
Rotation doubles
Il existe également deux directions de rotation qui sont :
Rotation à droite
Rotation à gauche
Enfin il existe des propriétés des rotation qui sont :
0(1) : temps d’exécution constant
Maintient l’ordre des nœuds (important pour les arbres binaires de
recherche)
Supposons que les nœuds sans cercle représentent des sous arbres.
10
b. Rotation simple à gauche
Supposons que les nœuds sans cercle représentent des sous arbres.
c. Rotation double
11
Parfois une rotation simple ne suffit pas, par exemple :
12
Pour l’algorithme requis pour les rotations doubles , on applique tout
simplement ceux des rotations simple à deux reprises , alors on aura
donc :
Exercice d’application
Résolution de l’exercice
1-Identifiez à coté de chaque nœud de l’arbre sa valeur Fe.
13
2- Cet arbre est-il équilibré ou pas ?
NON cet arbre n’est pas équilibré
3- Si l’arbre n’est pas équilibré :
3-1- Identifiez les nœuds requérant un équilibrage et les rotations requises
14
15