Vous êtes sur la page 1sur 7

2.

Arbres binaires de recherche

16

Chap III: Structures arborescentes

Arbres binaires de recherche


•  Un arbre binaire de recherche (ou ABR) est une structure de donnée qui permet de représenter
un ensemble de valeurs si l’on dispose d’une relation d’ordre sur ces valeurs.
•  Les opérations caractéristiques sur les arbres binaires de recherche sont l’insertion, la
suppression, et la recherche d’une valeur.
•  Ces opérations sont peu couteuses si l’arbre n’est pas trop déséquilibré.
=> En pratique, les valeurs sont des clés permettant d’accéder à des enregistrements.
Exemple:
•  Soit E un ensemble muni d’une relation
d’ordre, et soit A un arbre binaire portant
des valeurs de E.
•  L’arbre A est un arbre binaire de recherche
si pour tout noeud p de A, la valeur de p est
strictement plus grande que les valeurs
figurant dans son sous-arbre gauche et
strictement plus petite que les valeurs
figurant dans son sous-arbre droit.
=> Cette définition suppose donc qu’une valeur
n’apparaît au plus qu’une seule fois dans un arbre de
recherche.
© O.Lamouchi Source: 3
17
Chap III: Structures arborescentes

Arbres binaires de recherche


•  Pour accéder à la clé la plus petite dans un ABR il suffit de descendre sur le fils gauche
autant que possible. Le dernier noeud visité, qui n’a pas de fils gauche, porte la valeur la plus
petite de l’arbre.

•  Pour accéder à la clé la plus grande dans un ABR il suffit de descendre sur le fils droit autant
que possible. Le dernier noeud visité, qui n’a pas de fils droit, porte la valeur la plus grande
de l’arbre.

•  Exemple: Le parcours infixé de l’arbre produit la suite ordonnée des clés

⇒  7, 8, 9, 16, 17, 21, 22, 23, 25, 26, 27, 28, 29,
30, 32, 34, 35, 36, 37 ...

Source: 3
© O.Lamouchi Source: 3
18

Arbres binaires de recherche


Chap III: Structures arborescentes

Recherche d’une valeur


•  La recherche d’une valeur dans un ABR consiste à parcourir une branche en partant de la
racine, en descendant chaque fois sur le fils gauche ou sur le fils droit suivant que la clé
portée par le noeud est plus grande ou plus petite que la valeur cherchée.
•  La recherche s’arrête dès 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).

Source: 3
© O.Lamouchi
19
Arbres binaires de recherche
Chap III: Structures arborescentes

Recherche d’une valeur


Version itérative
Fonction rechercheAbr(a:ArbreBinaire , v: Info): Booléen
VAR
vtrouver: Booléen
DEBUT
Vtrouver <-VRAI
TANTQUE (Vide(a)=FAUX ET v <> Info(a)) FAIRE
SI v < Info(a) ALORS
a <- FilsGauche(a)
SINON
a <- FilsDroit(a)
FINSI
FINTANTQUE
SI Vide(a)=VRAI ALORS
vtrouver <-FAUX
FINSI
RETOURNER vtrouver
FIN
© O.Lamouchi
20

Arbres binaires de recherche


Chap III: Structures arborescentes

Recherche d’une valeur


Version récursive
Fonction rechercheAbr(a:ArbreBinaire , v: Info): Booléen
DEBUT
SI vide(a)=VRAI ALORS
RETOURNER Faux
SINON
SI v=Info(a) ALORS
RETOURNER Vrai
SINON
SI v < Info(a) ALORS
RETOURNER rechercheAbr (FilsGauche(a),v)
SINON
RETOURNER rechercheAbr (FilsDroite(a),v)
FINSI
FINSI
FINSI

FIN
© O.Lamouchi
21
Arbres binaires de recherche
Chap III: Structures arborescentes

Insertion d’une valeur


•  Le principe est le même que pour la recherche. Un nouveau noeud est créé avec la nouvelle
valeur et insérée à l’endroit où la recherche s’est arrêtée.
•  Exemple: Insérer la valeur 31

Source: 3
© O.Lamouchi
22

Arbres binaires de recherche


Chap III: Structures arborescentes

Insertion d’une valeur


Version récursive
Procedure InsertionAbr(a:abr , v: Info)

DEBUT
SI vide(a)=VRAI ALORS
a<-CreerArbre(v, NIL, NIL)
SINON
SI v < Info(a) ALORS
InsertionArb(FilsGauche(a),v)
SINON
SI v > Info(a) ALORS
InsertionArb(FilsDroite(a),v)
FINSI
FINSI
FINSI
FIN

© O.Lamouchi
23
Arbres binaires de recherche
Chap III: Structures arborescentes

Suppression d’un noeud


•  L’opération dépend du nombre de fils du noeud à supprimer.

1- Le noeud à supprimer est une feuille, il est terminal et il suffit de le retirer de l'arbre.
Si x est la feuille à supprimer:
- x feuille gauche alors parent(x)*.filsgauche <- Null
- x feuille droite alors parent(x)*.filsdroite <- Null
Exemple :

Source: 4

© O.Lamouchi
24

Arbres binaires de recherche


Chap III: Structures arborescentes

Suppression d’un nœud (la suite)


•  L’opération dépend du nombre de fils du noeud à supprimer.

2- Le nœud à supprimer n'a qu'un seul enfant, on relie son fils à son père et on supprime le nœud .

Si x est à supprimer et il a seulement un enfant alors il y’a 4 cas en total dépendant de la position
de x et celle de son enfant:
- x est un fils gauche alors: parent(x)*.filsgauche <- filsgauche(x) ou
parent(x)*.filsgauche <- filsdroite(x)
- x est un fils droite alors: parent(x)*.filsdroite <- filsgauche(x) ou
parent(x)*.filsdroite <- filsdroite(x)

Exemple :

Source: 4
Source: 3
© O.Lamouchi Source: 3
25
Arbres binaires de recherche
Chap III: Structures arborescentes

Suppression d’un nœud (la suite)


•  L’opération dépend du nombre de fils du noeud à supprimer.
3- Le nœud à supprimer a deux enfants.
Si x est à supprimer et il a deux:
- x est remplacé par son successeur: successeur(x) = le minimum dans le sous-arbre droit de
x.
Exemple :

Source: 4

- x est remplacé par son prédécesseur: prédécesseur(x) = le maximum dans le sous-arbre


gauche de x.
Exemple :

© O.Lamouchi Source: 4 26

Arbres binaires de recherche


Chap III: Structures arborescentes

Successeur et prédécesseur
§  Si toutes les clés dans l’arbre ABR sont distinctes, le successeur d’un noeud k est le noeud
contenant la plus petite clé supérieure à k.
§  Considérons le fragment d’arbre suivant:
- Le sous-arbre A ne contient que des clés inférieures à k : il ne peut pas
contenir le successeur de k.
- Le sous-arbre B ne contient que des clés supérieures à k : il peut
contenir le successeur de k que s’il n’est pas vide.
- y désigne le plus proche ancêtre de k qui soit le fils gauche de son père
(y = k si k est fils gauche de son père). Tous les ancêtres de k jusqu’à y
sont inférieurs ou égaux à k et leurs sous-arbres gauches ne contiennent
que des valeurs inférieures à k.
- x est le père de y. Sa valeur est supérieure à toutes celles contenues
dans son sous- arbre gauche (de racine y) et donc à k et à celles de B.
Toutes les valeurs de son sous-arbre droit sont supérieures à x.
=>> Si B est non vide, son minimum est le successeur de k, sinon le successeur de k est le premier
ancêtre (ascendant) de k dont le fils gauche est aussi ancêtre de k. Si cet ascendant n’existe pas
c’est que k portait la valeur la plus grande dans l’arbre.
© O.Lamouchi
27
Arbres binaires de recherche
Chap III: Structures arborescentes

Successeur et prédécesseur
§  Exemple:

! il est nécessaire d’avoir pour chaque noeud un lien vers son père pour mener à bien cette
opération.
© O.Lamouchi
28

Vous aimerez peut-être aussi