Vous êtes sur la page 1sur 16

Programmation Oriente Objet

Cours n7 : Arbres binaires


de recherche
Alain Giorgetti
giorgetti@univ-fcomte.fr
http://lifc.univ-fcomte.fr/~giorgett/
Laboratoire d'Informatique
de lUniversit de Franche-Comt
Arbres binaires de recherche - A. Giorgetti 2
Structures collectives tudies ici
Structures linaires
Table
accs index : t[i]
traitement itratif : FOR, WHILE, REPEAT
Liste chane
un seul suivant, accs squentiel : l.suivant
traitement rcursif : IF NOT l.estVide THEN ...
Structures arborescentes
Arbre binaire : 2 suivants maximum
Arbre gnral : nombre quelconque de suivants
Traitement rcursif : les suivants sont aussi des arbres
Un arbre n'a pas de cycle (moins gnral qu'un graphe)
Arbres binaires de recherche - A. Giorgetti 3
Arbre : structure de donnes
Un arbre est une collection (finie) de nuds de mme type
Un arbre est dfini (rcursivement) par :
un premier nud (appel racine de larbre)
0, 1, 2 ou plusieurs sous-arbres
disjoints (appels descendants de la racine)
Vocabulaire
feuille : nud sans descendant
fils d'un nud : racine d'un
descendant de ce nud
Sur l'exemple
Le nud de valeur t est
un fils du nud
Les feuilles sont les nuds
h
o t y
a s c
Exemple avec des nuds
stockant une valeur
de type char
Arbres binaires de recherche - A. Giorgetti 4
Cas tudi : arbre binaire
Un arbre binaire est un arbre dans lequel
chaque nud possde 0, 1 ou 2 fils
Chaque nud a un descendant gauche
et un descendant droit (ventuellement
vides)
Un arbre binaire peut tre vide
Vocabulaire :
Chaque nud stocke une information
appele valeur du nud
Chaque nud est le pre de ses fils
Deux nuds qui ont le mme pre sont
frres
b
a n
i r
e
t
r
y
gauche
droit
e
gauche
droit
Arbres binaires de recherche - A. Giorgetti 5
Implanter un arbre binaire
3 types
type des donnes stockes aux nuds : TValeur
type des nuds : TNoeud
type des arbres binaires : TArbre
Relations entre types
Structure rcursive
Un arbre binaire a une racine qui est un nud
Les descendants dun nud sont des arbres binaires
Les types TNoeud et TArbre s'utilisent l'un l'autre
Solution : les descendants d'un nud sont des pointeurs
On identifie un arbre avec ladresse de sa racine
TYPE TArbre = ^TNoeud;
Arbres binaires de recherche - A. Giorgetti 6
Extrait de l'interface Pascal
TYPE
TValeur = char; {changer ici pour un autre type}
TArbre = ^TNoeud;
TNoeud = OBJECT
val : TValeur;
gauche : TArbre;
droite : TArbre;
{}
CONSTRUCTOR init;
{Self est construit,
Self.gauche = Self.droite = nil}
END;
Remarque : le type TArbre nest pas un type objet. On peut aussi
le noter TPtNoeud.
Arbres binaires de recherche - A. Giorgetti 7
Arbre vide : pointeur sur nil
Exemple : arbre 5 nuds (dont la valeur est un mot)
Reprsentation dun arbre binaire
le nud racine
unArbre
une
phrase
cinq
de
mots
nil nil
nil nil nil nil
un nud
une feuille
objet de type TNoeud
Arbres binaires de recherche - A. Giorgetti 8
Toutes les mthodes lies aux arbres sont dans le
type TNoeud, car TYPE TArbre = ^TNoeud;
Primitives d'encapsulation des champs
FUNCTION arbreGauche : TArbre;
FUNCTION arbreDroit : TArbre;
Traitement rcursif
Condition d'arrt : un nud est-il une feuille ?
FUNCTION estFeuille : boolean;
Conditions d'accs aux descendants (gauche et droit)
Transformations d'arbres
Ajout de feuilles, de sous-arbres
Suppression d'une feuille, d'un sous-arbre gauche ou droit
Mthodes du type TNoeud
Arbres binaires de recherche - A. Giorgetti 9
Motivations des ABR
ABR : Arbre binaire de recherche
Atout algorithmique : recherche et tri efficaces
Comparaison avec d'autres structures collectives
Les tableaux et tables
recherche dichotomique si le tableau est tri : efficace (log
2
n)
tri : peu efficace (n
2
)
Les listes chanes
recherche : peu efficace (n)
tri rcursif par fusion : efficace (n log
2
n)
Le secret des ABR
tri efficace car les donnes sont maintenues ordonnes
recherche efficace, inspire par la dichotomie
Arbres binaires de recherche - A. Giorgetti 10
Arbre binaire de recherche
Un arbre binaire de recherche (ABR) ordonne
totalement les informations quil stocke :
Toutes les valeurs infrieures ou gales celle de la racine sont
stockes dans le descendant gauche de la racine
Toutes les valeurs strictement suprieures celle de la racine sont
stockes dans le descendant droit
Spcification de cette proprit d'ordre
Pour chaque nud n de larbre, on sassure que :
n.gauche.maxVal <= n.val < n.droite.minVal (1)
Conditions
dfinir les mthodes maxVal et minVal
le type TValeur doit disposer dune fonction de comparaison
tout ajout, toute suppression de nud doit maintenir (1) vraie
Arbres binaires de recherche - A. Giorgetti 11
Exemple d'ABR
Exercices
Vrifier que la proprit d'ordre est
vrifie
Insrer des entiers en conservant
cette proprit
Remarques
Une insertion peut toujours se faire
aux feuilles de larbre
On peut supprimer des feuilles
Pour la suppression dun nud 2
fils, voir plus loin
6
3 1
2 9
7
4
3
gauche droite
8
Arbres binaires de recherche - A. Giorgetti 12
Un arbre binaire de recherche
est un arbre binaire particulier
stocke une collection ordonne de valeurs
Dfinir un type objet TNoeudAbr avec les mthodes
FUNCTION minVal : TValeur;
{retourne la plus petite valeur des noeuds de Self}
FUNCTION maxVal : TValeur;
{retourne la plus grande valeur des noeuds de Self}
La pr-condition est toujours
{ Self est construit et nest pas vide }
Parcours complet dans lordre
parcours infix des nuds de larbre (exercice)
Types Pascal pour les ABR
Arbres binaires de recherche - A. Giorgetti 13
Ajout et suppression dans un ABR
La structure dordre doit tre conserve
prcondition et postcondition commune toutes les mthodes
{ tout noeud n de Self verifie
n.gauche^.maxVal <= n.val < n.droite^.minVal }
Insrer une valeur au bon endroit
PROCEDURE inserer(v : TValeur);
{ Self contient un noeud supplmentaire de valeur
gale v et la structure dordre est conserve }
programmer en exercice
Supprimer une valeur
{ v est la valeur dun nud n de Self }
PROCEDURE supprimer(v : TValeur);
{ Le nud n de Self est supprim et la structure
dordre est conserve }
Arbres binaires de recherche - A. Giorgetti 14
Recherche dans un ABR
Un ABR permet une recherche efficace
{ Self est construit }
FUNCTION rechercher(v : TValeur) : TPtNoeud;
{ retourne un pointeur sur le premier noeud de Self
dont la valeur est v, ou nil sil nexiste pas de
tel noeud }
Algorithme de recherche rcursif
cas darrt avec chec : larbre est vide
sinon, cas darrt avec succs : v est la valeur du nud racine
sinon, poursuite de la recherche dans le sous-arbre gauche ou dans
le sous-arbre droit, selon ...
Arrt de l algorithme ? Oui, car la taille des arbres
explors est un entier naturel qui dcrot strictement.
algorithme efficace : ~ log
2
(n) nuds parcourus
Arbres binaires de recherche - A. Giorgetti 15
Algorithme de suppression
4 cas de nud supprimer
une feuille : immdiat
un nud avec un seul fils : on le remplace par son fils
un nud avec 2 fils : on lui donne la valeur minimale de
son sous-arbre droit, et on supprime le nud qui a cette
valeur (rcursif)
Remarques
Lalgorithme sarrte car
Il n'est pas quivalent de prendre la valeur maximale du
sous-arbre gauche (pourquoi ?)
On peut viter lappel rcursif de suppression (comment ?)
Arbres binaires de recherche - A. Giorgetti 16
Equilibrer les ABR
Une mauvaise succession dinsertions et de
suppressions peut dsquilibrer larbre et rendre
les recherches moins efficaces
Arbre binaire quilibr
intuitivement : branches de taille voisine
dfinition : pour tout nud n de larbre,
| hauteur(n.gauche) - hauteur(n.droite) | <= 1
On dispose dalgorithmes qui r-quilibrent larbre, assez coteux,
utiliser de temps en temps
Exercices
spcifier puis implanter une mthode hauteur
tester si un arbre est quilibr
...

Vous aimerez peut-être aussi