Vous êtes sur la page 1sur 194

Universit Saad Dahlab de Blida

Facult des Sciences


Dpartement dInformatique
Licence dInformatique
Semestre 3 (2me anne)
Algorithmique et Structures de Donnes

CHAPITRE V:
STRUCTURES
HIRARCHIQUES

Mme AROUSSI

2016-2017

Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/


PLAN DU CHAPITRE V
Introduction

Dfinitions et Terminologies

Les Arbres Binaires

Les Arbres Binaires de Recherche (ABR)

Les Arbres AVL

Les TAS 2
INTRODUCTION
Dans les tableaux, nous avons :
Un accs direct par indice (rapide)

Linsertion et la suppression ncessitent des dcalages

Dans les Listes Linaires Chanes, nous avons :


Un accs squentiel lent

Linsertion et la suppression se font uniquement par modification de

chanage

Les arbres reprsentent un compromis entre les deux :


3
Un accs relativement rapide un lment partir de sa cl

Linsertion et la suppression non coteuses


INTRODUCTION
De plus, les arbres sont des structures de donnes

fondamentales en informatique, trs utiliss dans tous les

domaines, parce quils sont bien adapts la

reprsentation naturelle dinformations homognes

organises, et dune grande commodit et rapidit de

manipulation.

4
INTRODUCTION
Leur usage est multiple, car il capte lide de hirarchie;

titre dexemples, nous pouvons citer:

Dcoupage dun livre en parties, chapitres, sections,

paragraphes,

Livre

C1 C2 C3

S1.1 S1.2 S2.1 S2.2 S2.3

5
S2.1.1 S2.1.2
INTRODUCTION
Leur usage est multiple, car il capte lide de hirarchie;

titre dexemples, nous pouvons citer:

Hirarchies de fichiers,

6
INTRODUCTION
Leur usage est multiple, car il capte lide de hirarchie;

titre dexemples, nous pouvons citer:

Expressions Arithmtiques

-
Lexpression A - (B + C * (D - E)) * F
A *
se reprsente facilement par un arbre
+ F
o apparat clairement la priorit des
oprations: B *
C -
7

D E
TERMINOLOGIES
Un arbre est une structure de donnes (souvent dynamique)
reprsentant un ensemble de valeurs organises
hirarchiquement (non linaire). Chaque valeur est stocke dans
un nud. Les nuds sont connects entre eux par des artes
qui reprsentent des relations parent/fils.

Artes Nuds
A

B C D

E F G H I
8

J K L
TERMINOLOGIES
Racine: est le nud qui n'a
Racine
pas de prdcesseur (parent) et
A
possde zro ou plusieurs fils. La
Nud interne
racine constitue la caractristique B C D
d'un arbre.
Feuille : est un nud qui n'a E F G H I

pas de successeur (fils). Une


J L
feuille est aussi appele un nud K

externe. Feuilles
Nud interne : est tout nud
qui admet au moins un 9

successeur (fils).
TERMINOLOGIES
Fils dun nud : sont ses
successeurs. Dans l'exemple, F, G,
H, et I sont les fils du nud D.
Frres : sont les successeurs A

ou les fils issus d'un mme nud


B C D
(parent direct). Dans l'exemple,
B, C et D sont des frres. E F G H I
Pre : est un nud qui admet
au moins un successeur (fils). J K L

Dans l'exemple, D est le pre des


nuds F, G, H et I. 10
TERMINOLOGIES
Sous arbre : est une portion
de l'arbre. Dans l'exemple, le
nud G avec ces deux fils J et K
constituent un sous arbre. A

Une branche est une suite de


B C D
nuds connects de pre en fils
(de la racine une feuille). E F G H I
A-B-E
A-C J L
K
A-D-F
A-D-G-J 11

..
TERMINOLOGIES
Descendants dun nud :
sont tous les nuds du sous arbre
de racine nud. Dans l'exemple,
les descendants de D sont F, G, A

H, I, J, K et L.
B C D
Ascendants dun nud :
sont tous les nuds se trouvant E F G H I
sur la branche de la racine vers ce
nud. Dans l'exemple, les J K L

ascendants de J sont G, D et A.
Les ascendants de E sont B et A. 12
TERMINOLOGIES
Taille dun arbre: est le
nombre de nuds quil possde.
Taille de larbre ci contre = 12
Un arbre vide est de taille gale A

0.
B C D
Degr dun nud : est le
nombre de ses fils. Dans
E F G H I
l'exemple, le degr de B est 1, le
degr de D est 4. J L
K
Degr dun arbre : est le
degr maximum de ses nuds. 13

Degr de larbre ci contre = 4


TERMINOLOGIES
Le niveau d'un nud: est la distance qui le spare de la
racine:
Le niveau de la racine = 0
Le niveau de chaque nud est gale au niveau de son pre plus 1
Le niveau du nud contenant G' est gal 2.

Niveaux Racine
0 ....... A

1 ........
B C D

2 E F
.........
G H I
14

3 ...........
J K L
TERMINOLOGIES
La profondeur d'un arbre (ou sa hauteur) : est le plus
grand niveau, c--d la distance entre la racine et la feuille la plus
lointaine. Dans l'exemple, la profondeur de l'arbre est gal 3

Niveaux Racine
0 ....... A

1 ........
B C D

2 E F
.........
G H I

15

3 ...........
J K L
TERMINOLOGIES
Fort : est un ensemble d'arbres.

B C D

E F H I

G L

J K
16
TERMINOLOGIES
Dfinition rcursive
Cas particulier: NIL est un arbre vide, contenant zro nud

Cas gnral: SI n est un


nud et si T1, T2, ...Tm sont Racine
Racine de T1
des arbres, ALORS on peut
construire un nouvel arbre en T1
connectant T1, T2, ...Tm Racine de T 1

T1
comme des fils n.
Chaque Ti est dfinit de la
mme manire (rcursivement).
T1, T2, ...Tm sont alors des 17

sous- arbres de n.
PARTIE II:
ARBRES BINAIRES
PLAN DE LA PARTIE II
Dfinition

Modle

Parcours

Reprsentation contige

Exemple dapplication 19
DFINITION
Un arbre binaire est un arbre o chaque nud est connect
deux sous-arbres (un sous-arbre gauche et un sous-arbre droit).
Donc, un arbre binaire est un arbre de degr 2, cest--dire que
chaque nuds a au plus deux fils. Ainsi, le premier fils d'un nud
n est appel Fils-Gauche (FG) et le deuxime fils est appel Fils-
Droit (FD). racine A

NIL
B F

C G K

D H I 20

J
DFINITION
Un arbre binaire est dit strictement binaire si chaque nud
interne (non feuille) a exactement 2 fils diffrents de NIL.
Si un arbre strictement binaire a n feuilles Alors :
le nombre total de ses nuds = 2n-1.
le nombre de ses nuds non feuilles (nuds internes) = n-1

A racine
Le nombre de feuilles : n=6
(C, D,H, M, J, K) B F

Le nombre total de nuds : C D G K

2n-1=11
Le nombre de nuds
H I
21

internes: n-1=5 (A, B, F, G, I) M


J
DFINITION
Un arbre binaire complet est un arbre strictement binaire o
toutes les feuilles sont au mme niveau.
Dans un arbre binaire complet de profondeur d :
le nombre total de nuds n = 20 + 21 + 22 + ... 2d = 2d+1-1
ainsi, d = log2(n+1) 1
le nombre de nuds internes = 2d-1
le nombre de feuilles = 2d racine A

le nombre de nuds dans le niveau i = 2i


B F

C D G K

22
DFINITION
Un arbre binaire complet est un arbre strictement binaire o
toutes les feuilles sont au mme niveau.
Dans lexemple ci dessous:
d=2
le nombre total de nuds n = 23-1 = 7
le nombre de nuds internes = 22-1 = 3
le nombre de feuilles = 22 = 4 racine A

le nombre de nuds dans le niveau 1 = 2


B F

C D G K

23
MODLE
L'arbre est implment souvent de manire dynamique

comme un ensemble de maillons (nuds) chans entre eux.

La structure d'un nud de l'arbre est la suivante :

Structure de Donnes
TYPE Tnoeud = STRUCTURE
Info : Typeqq
FG : * Tnoeud
FD : * Tnoeud
FIN
VAR Arbre : * Tnoeud 24
MODLE
On dfinit le modle (machine abstraite) suivant dun arbre
binaire:

Fonction Rle
Info(p) permet d'accder l'information du nud p

FG(p) permet d'accder l'information de fils gauche du nud p


FD(p) permet d'accder l'information de fils droit du nud p

Aff_info(p, x) permet de modifier l'information du nud p

Aff_FG(p, x) permet de modifier l'information de fils gauche du nud p

Aff_FD(p, x) permet de modifier l'information de fils droit du nud p


permet de crer un nud avec x comme information et
Crer_noeud(x) retourne la rfrence du nud. Le nud cr a Nil comme fils
gauche et droit. 25
Liberer_noeud(p) permet de librer le nud rfrenc par p.
EXERCICE 01
Ecrire des algorithmes rcursifs pour dterminer dans un
arbre binaire contenant des entiers:
a. le nombre de nuds,
b. le nombre de feuilles,
c. le nombre des nuds internes
d. la profondeur.
e. la somme des contenus de tous les nuds,
f. le minimum des valeurs contenues.
g. le maximum des valeurs contenues
h. lexistence dun lment x 26
PARCOURS
Le parcours dun arbre consiste passer par tous ses
nuds.
Les parcours permettent deffectuer tout un ensemble de
traitement sur les arbres.
On distingue deux types de parcours :
Des parcours en profondeur (depth-first) explorent
l'arbre branche par branche. Parmi lesquels: le Prordre,
lInordre et le Postordre.
Des parcours en largeur (breadth-first) explorent l'arbre
niveau par niveau 27
PARCOURS EN PROFONDEUR
Dans un parcours en profondeur, on descend le plus
profondment possible dans larbre puis, une fois quune
feuille a t atteinte, on remonte pour explorer les autres
branches en commenant par la branche la plus basse
parmi celles non encore parcourues.
Le parcours en profondeur peut se faire en :
Prordre (Prfixe) : o on affiche la racine avant ses fils (Racine
FG FD),
Inordre (Infixe) : o on affiche le fils gauche avant sa racine et son
frre droit (FG Racine FD),
28
Postordre(Postfixe) : o on affiche les fils avant leur racine (FG
FD Racine).
PARCOURS EN PROFONDEUR
Ces parcours (prordre, inordre et postordre) sont des
parcours simples dfinir et programmer (en rcursif).
Soit R un arbre binaire (pouvant tre vide : R=NIL).
S'il n'est pas vide (n pointe le nud racine), alors il a la forme
suivante (avec T1 et T2 des sous arbres dfinis de la mme manire
que n) :
R

T1 T2

29

Sous arbre gauche G Sous arbre droit D


PARCOURS PREORDRE
Le parcours prordre de R (s'il n'est pas vide) consiste
visiter le nud racine (R) ensuite parcourir rcursivement
en prordre les sous arbres T1 (sous arbre gauche) puis T2
(sous arbre droit) ce qui donne : [ R , T1 , T2 ou RGD]

T1 T2

30

Sous arbre gauche G Sous arbre droit D


PARCOURS PREORDRE
Le parcours prordre de R (s'il n'est pas vide) consiste
visiter le nud racine (R) ensuite parcourir rcursivement
en prordre les sous arbres T1 (sous arbre gauche) puis T2
(sous arbre droit) ce qui donne : [ R , T1 , T2 ou RGD]

B C

D E F G

H I 31

Rsultat de parcours: ABDH I EC FG


PARCOURS PREORDRE
La procdure (rcursive) qui affiche les valeurs en
parcours prordre dun arbre de racine R est :

Procdure Prordre( R:* Tnoeud )


Dbut
SI R NIL
ecrire( Info(R) )
Prordre( FG(R) )
Prordre( FD(R) )
FSI
fin
32
PARCOURS INORDRE
Le parcours inordre de R (s'il n'est pas vide) consiste
d'abord parcourir rcursivement en inordre le sous arbre
gauche T1, puis visiter le nud racine (R) ensuite parcourir
rcursivement en inordre le sous arbre droit T2 ce qui donne
[ T1 , R , T2 ou GRD ]
R

T1 T2

33

Sous arbre gauche G Sous arbre droit D


PARCOURS INORDRE
Le parcours inordre de R (s'il n'est pas vide) consiste
d'abord parcourir rcursivement en inordre le sous arbre
gauche T1, puis visiter le nud racine (R) ensuite parcourir
rcursivement en inordre le sous arbre droit T2 ce qui donne
[ T1 , R , T2 ou GRD ]

B C

D E F G
34
H I
Rsultat de parcours: HDIBEAFC G
PARCOURS INORDRE
La procdure (rcursive) qui affiche les valeurs en
parcours inordre dun arbre de racine R est :

Procdure Inordre( R:*Tnoeud )


Dbut
SI R NIL
Inordre( FG(R) )
ecrire( Info(R) )
Inordre( FD(R) )
FSI
fin
35
PARCOURS POSTORDRE
Le parcours postordre de R (s'il n'est pas vide) consiste
d'abord parcourir rcursivement en postordre les sous
arbres T1 puis T2 ensuite visiter le nud racine (R) ce qui
donne [ T1 , T2 , R ou GDR]

T1 T2

36

Sous arbre gauche G Sous arbre droit D


PARCOURS POSTORDRE
Le parcours postordre de R (s'il n'est pas vide) consiste
d'abord parcourir rcursivement en postordre les sous
arbres T1 puis T2 ensuite visiter le nud racine (R) ce qui
donne [ T1 , T2 , R ou GDR]

B C

D E F G

H I
37

Rsultat de parcours: HIDEBFGCA


PARCOURS POSTORDRE
La procdure (rcursive) qui affiche les valeurs en
parcours postordre dun arbre de racine R est :

Procdure Postordre( R: *Tnoeud)


Dbut
SI RNIL
Postordre( FG(R) )
Postordre( FD(R) )
ecrire( Info(R) )
FSI
fin

38
PARCOURS EN PROFONDEUR
On peut faire ces trois parcours sans utiliser la
rcursivit. Il faudra alors un moyen pour pouvoir remonter
dans les branches de l'arbre:
On pourra par exemple utiliser une structure de pile pour
sauvegarder les adresses des nuds par lesquels on est descendu et
les dpiler quand on en aura besoin pour remonter.
On peut aussi enrichir la structure des nuds en incluant un
pointeur vers le nud pre.

Il existe d'autres types de parcours en profondeur, comme


par exemple:
Le prordre inverse (R T2 T1 ou RDG),
39
L'inordre inverse (T2 R T1 ou DRG),
Le postordre inverse (T2 T1 R ou DGR).
PARCOURS EN PROFONDEUR
Exercice 02: Trouver les algorithmes itratifs du
parcours en profondeur (prordre, inordre et postordre )
dans un arbre binaire

40
PARCOURS EN LARGEUR
Dans le parcours par niveau, tous les nuds dun mme
niveau sont traits avant de descendre au niveau suivant

A Rsultat de parcours:
ABCDEFGH I
B C

D E F G

H I

41
PARCOURS EN LARGEUR
Dans le parcours par niveau, tous les nuds dun mme
niveau sont traits avant de descendre au niveau suivant
Procdure parcours_largeur( R:* Tnoeud )
Var F:filedattente; P: *Tnoeud;
Debut
PR;
Si R NIL Alors
Enfiler(F,P);
TQ (Non FileVide(F))
Defiler(F,P);
crire(info(P));
Si FG(P) NIL Alors Enfiler(F,FG(P));
Si FD(P) NIL Alors Enfiler(F,FD(P)); 42
FTQ
Fin
EXERCICE 01
Ecrire des algorithmes itratifs pour dterminer dans un
arbre binaire contenant des entiers:
a. le nombre de nuds,
b. le nombre de feuilles,
c. le nombre des nuds internes
d. la profondeur.
e. la somme des contenus de tous les nuds,
f. le minimum des valeurs contenues.
g. le maximum des valeurs contenues
h. lexistence dun lment x 43
REPRSENTATION CONTIGE
On peut prsenter les arbres de manire statique en
utilisant les tableaux.
Reprsentation Standard:
Chaque lment du tableau possde quartes champs: un pour
l'information, un pour le fils gauche, un pour le fils droit et un champ
de type boolen pour indiquer si la case est libre ou occupe.

TYPE Tnoeud= STRUCTURE


Info : Typeqq
FG : entier
FD : entier
vide: boolen 44

FIN
REPRSENTATION CONTIGE
Reprsentation Standard:
Si la racine de larbre est toujours la position 1 du tableau, larbre
sera dfini comme suit:

VAR Arbre = TABLEAU[M] de Tnoeud

Indice Tnoeud
Vide FG Info FD

0 F 1 a 4
1 F 2 b 3
2 F -1 c -1
3 F -1 d -1
4 F -1 e -1
45
V ? ? ?
M-1 V ? ? ?
REPRSENTATION CONTIGE
Reprsentation Standard:
Si on veut que la racine soit n'importe o dans le tableau, alors
l'arbre sera dfini (le nud reste inchang):

TYPE Tarbre = STRUCTURE


T : TABLEAU[M] de Tnoeud
Racine : ENTIER
FIN Indice Tnoeud
VAR Arbre : Tarbre Vide FG Info FD

0 F -1 c -1
1 F 0 b 3
Racine
2 F 1 a 4
3 F -1 d -1
4 F -1 e -1 46

V ? ? ?
M-1 V ? ? ?
PARTIE III:
ARBRES BINAIRES DE
RECHERCHE(ABR)
PLAN DE LA PARTIE III
Dfinition

Complexit

Parcours

Oprations de Recherche et de mise jours

(Insertion et Suppression)
48

Exemples dapplication: Tri par ABR


DFINITION
Un Arbre Binaire de Recherche (ABR) est un arbre
binaire ordonn tel que pour tout nud n:
Toutes les valeurs du sous-arbe gauche de n sont strictement
infrieures la valeur de n, et
Toutes les valeurs du sous-arbre droit de n sont suprieures ou
gales la valeur de n.

49
DFINITION
Un Arbre Binaire de Recherche (ABR) est un arbre
binaire ordonn tel que pour tout nud i :
Toutes les valeurs du sous-arbre gauche de i sont strictement
infrieures la cl de i , et
Toutes les valeurs du sous-arbre droit de i sont suprieures ou
gales la cl de i .

Intrt de cette proprit : diminuer la complexit


temporel de recherche, dinsertion et de suppression dans
larbre

50
COMPLEXIT
Intrt de cette proprit : diminuer la complexit
temporel de recherche, dinsertion et de suppression dans
larbre

87 ?

O (h) tel que h = log2(n) dans un 51


arbre quilibr O (n)
PARCOURS
Voici un exemple dun ARB contenant des valeurs
entires, appliquer les diffrents parcours vus sur les
arbres binaires. 20

15 59

5 27 71

3 10 33

55
8

Le parcours inordre de cet arbre donne


52 la liste
52

ordonne suivante : 3, 5, 8, 10, 15, 20, 27, 33, 52, 55, 59,
OPRATION DE RECHERCHE
La recherche est dichotomique, chaque tape, un sous
arbre est limin:
Rechercher (55)
Rechercher (FD(20)) 55 ?
20
Rechercher (FG(59))
Rechercher (FD(27)) 15 59

Rechercher (FD (33)) 27 71


5
lment trouv
3 10 33

55 53
8

52
OPRATION DE RECHERCHE
Fonction RechercherABR_rec (R:*Tnoeud, x: entier) : * Tnoeud
Debut
Si R =Nil alors
Retourner (Null)
Sinon
Si Info (R) = x alors
Retourner (R)
Sinon
Si Info(R)>x alors
Retourner (RechercherABR_rec(FG(R), x))
Sinon
Retourner (RechercherABR_rec(FD(R), x)) 54

Fin
OPRATION DE RECHERCHE
Fonction RechercherABR _iter(R:*Tnoeud, x: entier) : * Tnoeud
Debut
TQ R Nil faire
Si Info (R) = x alors
Retourner (R)
Sinon
Si Info(R)>x alors
RFG(R)
Sinon
RFD(R)
FTQ
Retourner (Null) 55

Fin
OPRATION DINSERTION
L'insertion d'un lment se fait toujours au niveau d'une

feuille. Cette insertion dans un ABR doit maintenir la

proprit des arbres de recherche, ainsi:

1. Rechercher la position dinsertion

2. Raccorder le nouveau nud son parent

56
OPRATION DINSERTION
+ 25

20

15 59

5 27 71

3 10 25 33

RechercherPosition (25) 55
8
Rechercher (FD(20)) 52
Rechercher (FG(59))
Position trouv pour linsertion, le pre est le nud 27
57
Insrer 25 au niveau de la feuille dont le pre est 27
OPRATION DINSERTION
Fonction InsererABR_rec (R:*Tnoeud, x: entier) : * Tnoeud
Debut
Si R =Nil alors
RCreerNoeud(x)
Sinon
Si Info(R)>x alors
Aff_FG(R, InsererABR_rec(FG(R), x))
Sinon
Aff_FD(R, InsererABR_rec(FD(R), x))
Retourner (R)
Fin 58
OPRATION DINSERTION
Fonction InsererABR_iter (R:*Tnoeud, x: entier) : * Tnoeud
Var P, Q: *Tnoeud
Debut
PCreerNoeud(x)
Si R =Nil alors
RP
Sinon
QR
TQ (QNull) faire
Si Info(Q)>x alors
Si FG(Q) =Nil alors Aff_FG(Q, P)
QFG(Q)
Sinon
Si FD(Q)=Null alors Aff_FD(Q, P)
QFD(Q) 59
Retourner (R)
Fin
OPRATION DE SUPPRESSION
Pour supprimer le nud i dun ARB, il faudra le

rechercher. Une fois le nud i trouv, on se trouve

dans une des situations suivantes :

60
OPRATION DE SUPPRESSION
Cas 1: Suppression d'une feuille
Il suffit de l'enlever de l'arbre vu qu'elle n'a pas de fils.
Exemple: supprimer le nud i qui contient la valeur 8

1. Rechercher(8)

2. Librer le nud i 20

15 59

5 27 71

3 10 33

i 12 55 61
8

52
OPRATION DE SUPPRESSION
Cas 2: Suppression d'un nud avec un fils
Il faut l'enlever de l'arbre en le remplaant par son fils.
Exemple: supprimer le nud i qui contient la valeur 10

1. Rechercher(10)

2. Chainer le pre de i avec le FD(i) 20


3. Librer le nud i 59
15

5 27 71

3 10 33
i

12 55 62

52
OPRATION DE SUPPRESSION
Cas 2: Suppression d'un nud avec un fils
Il faut l'enlever de l'arbre en le remplaant par son fils.
Exemple: supprimer le nud i qui contient la valeur 10

1. Rechercher(10)

2. Chainer le pre de i avec le FG(i) 20


3. Librer le nud i 59
15

5 27 71

3 10 i 33

55 63
8

52
OPRATION DE SUPPRESSION
Cas 3: Suppression d'un nud avec deux fils
Etape 1: On change le nud supprimer avec son successeur
le plus proche (le nud le plus gauche du sous-arbre droit) ou
son plus proche prdcesseur (le nud le plus droite du
sous-arbre gauche). Cela permet de garder une structure d'arbre
binaire de recherche. 34

22 66

8 29 50 71

Le plus proche 70 81
17 25 56
prdcesseur

9 23 32 55 69
64
Le plus proche
successeur
OPRATION DE SUPPRESSION
Cas 3: Suppression d'un nud avec deux fils
Etape 1 Cas A: On change le nud supprimer avec son
successeur le plus proche (le nud le plus gauche ou le plus
petit du sous-arbre)
Racine: 71
La plus petite valeur : 69

34

22 66

8 29 50 71

17 25 56 70 81
65

9 23 32 55 69
OPRATION DE SUPPRESSION
Cas 3: Suppression d'un nud avec deux fils
Etape 1 Cas A: On change le nud supprimer avec son
successeur le plus proche (le nud le plus gauche ou le plus
petit du sous-arbre)
Racine: 71
La plus petite valeur : 69

34

66
Fonction Successeur (R: *Tnoeud): *Tnoeud
Debut 50 71
RFD(R)
Si RNull alors 56 70 81
TQ FG(R)Null faire RFG(R) 66
Retourner (R)
55 69
Fin
OPRATION DE SUPPRESSION
Cas 3: Suppression d'un nud avec deux fils
Etape 1 Cas A: On change le nud supprimer avec son
plus proche prdcesseur (le nud le plus droite ou le plus
grand du sous-arbre gauche).
Racine: 50
La plus petite valeur : 56

34

22 66

8 29 50 71

17 25 56 70 6781

9 23 32 55 69
OPRATION DE SUPPRESSION
Cas 3: Suppression d'un nud avec deux fils
Etape 1 Cas A: On change le nud supprimer avec son
plus proche prdcesseur (le nud le plus droite ou le plus
grand du sous-arbre gauche).
Racine: 50
La plus petite valeur : 56
34

Fonction Predecesseur (R: *Tnoeud): *Tnoeud 66


Debut
RFG(R) 50 71
Si RNull alors
TQ FD(R)Null faire RFD(R)
56 70
Retourner (R) 68
Fin
55 69
OPRATION DE SUPPRESSION
Cas 3: Suppression d'un nud avec deux fils
Etape 2: on applique nouveau la procdure de suppression qui
est maintenant une feuille ou un nud avec un seul fils.
Ainsi, si on choisit dchanger le nud 66 avec son plus proche
successeur 69 , on obtient
34

22 66
69

8 29 50 71

17 25 56 70 81

9 23 32 55 69
69
OPRATION DE SUPPRESSION
Cas 3: Suppression d'un nud avec deux fils
Puis on applique nouveau la procdure de suppression qui est
maintenant une feuille ou un nud avec un seul fils.
Ainsi, si on choisit d changer le nud 66 avec son plus proche
prdcesseur 56 , on obtient
34

22 66
56

8 29 50 71

17 25 55 70 81

9 23 32 69
70
OPRATION DE SUPPRESSION
En conclusion, pour supprimer le nud i dun ARB, il
faudra le rechercher. Une fois le nud i trouv, on se
trouve dans une des situations suivantes :

i
Cas Action
FG FD
Feuille Null Null Remplacer i parNil
Avec un Null Null Remplacer i par FD(i)
fils Null Null Remplacer i par FG(i)
1. Rechercher le plus proche
Avec prdcesseur ou successeur de i ,
deux Null Null soit P.
71
fils 2. Remplacer Info(i) par Info(P)
3. Remplacer P par FG(P) ou FD(P)
OPRATION DE SUPPRESSION
Fonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * Tnoeud
Var P, Q: *Tnoeud
Debut
RechercherABR (R, x, Q, P) Procedure RechercherABR (R: *Tnoeud, x:
entier, Var Q: *Tnoeud, Var Pre: *Tnoeud)
Pre Null; Q Null;
Cette procdure
TQ R Nil faire
retourne ladresse du
Si Info (R) = x alors
nud contenant x QR
(soit Q) ainsi que Sinon
ladresse de son pre PreR
(soit Pre) Si Info(R)>x alors
RFG(R)
Sinon 72
RFD(R)
FTQ
OPRATION DE SUPPRESSION
Fonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * Tnoeud
Var P, Q: *Tnoeud
Debut
RechercherABR (R, x, Q, P)
Si Q Nil alors
// llment x existe dans Q
Si FG(Q) =Nil alors
Si FD(Q) =Nil alors
//Cas n1: Q est une feuille
Cette procdure
Chaner (R, P,Nil, x)
Sinon //Cas n2: Q possde un FD permet de chane le
Chaner (R, P, FD(Q), x) pre de Q (P) avec le
Sinon
Fil de Q selon la
Si FD(Q) =Nil alors
//Cas n2: Q possde un FG valeur de x
Chaner (R, P, FG(Q), x) 73
OPRATION DE SUPPRESSION
Fonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * Tnoeud
Var P, Q: *Tnoeud
Debut
RechercherABR (R, x, Q, P)
Si Q Nil alors
// llment x existe dans Q
Si FG(Q) =Nil alors Procedure Chaner (Var R:
Si FD(Q) =Nil alors *Tnoeud , PreQ: *Tnoeud,
//Cas n1: Q est une feuille FilsQ: *Tnoeud, x: entier)
Chaner (R, P,Nil, x) Si PreQ =Nil alors
Sinon //Cas n2: Q possde un FD RFilsQ
Chaner (R, P, FD(Q), x) Sinon
Sinon
Si Info(P)>x alors
Si FD(Q) =Nil alors
Aff_FG(P, FilsQ)
//Cas n2: Q possde un FG
Chaner (R, P, FG(Q), x) Sinon 74

Aff_FD(P, FilsQ)
OPRATION DE SUPPRESSION
Fonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * Tnoeud
Var P, Q: *Tnoeud
Debut
RechercherABR (R, x, Q, P)
Si Q Nil alors // llment x existe dans Q
Si FG(Q) =Nil alors
Si FD(Q) =Nil alors //Cas n1: Q est une feuille
Chaner (R, P,Nil, x)
Sinon //Cas n2: Q possde un FD
Chaner (R, P, FD(Q), x)
Sinon
Si FD(Q) =Nil alors //Cas n2: Q possde un FG
Chaner (R, P, FG(Q), x)
Sinon // Cas n3: Q possde deux fils
Successeur (Q, S, PS)
Cette procdure retourne ladresse du successeur
75
de Q (S) ainsi que ladresse de son pre (PS)
OPRATION DE SUPPRESSION
Fonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * Tnoeud
Var P, Q: *Tnoeud
Debut
RechercherABR (R, x, Q, P)
Si Q Nil alors // llment x existe dans Q
Si FG(Q) =Nil alors
Si FD(Q) =Nil alors //Cas n1: Q est une feuille
Chaner (R, P,Nil, x)
Sinon //Cas n2: Q possde un FD
Chaner (R, P, FD(Q), x)
Sinon
Si FD(Q) =Nil alors //Cas n2: Q possde un FG
Chaner (R, P, FG(Q), x)
Sinon // Cas n3: Q possde deux fils
Successeur (Q, S, PS)
Procdure Successeur (R: *Tnoeud, Var Q, PS: *Tnoeud)
PSR; SFD(R) 76
Si (SNull) alors
TQ FG(S)Null faire SFG(S)
RechercherABR (R, x, Q, P)
Si Q Nil alors // llment x existe dans Q
Fin faux
TQ non fin faire
Si FG(Q) =Nil alors
Si FD(Q) =Nil alors //Cas n1: Q est une feuille
Chaner (R, P,Nil, x); Fin vrai
Sinon //Cas n2: Q possde un FD
Chaner (R, P, FD(Q), x); Fin vrai
Sinon
Si FD(Q) =Nil alors //Cas n2: Q possde un FG
Chaner (R, P, FG(Q), x); Fin vrai
Sinon // Cas n3: Q possde deux fils
Successeur (Q, S, P)
Aff_Info (Q, Info(S))
QS; PPS; xInfo(S)
FTQ
LibrerNoeud(Q) 77
FSI
Retourner (R)
OPRATION DE SUPPRESSION
Fonction SupprimerABR_rec (R:*Tnoeud, x: entier) : * Tnoeud
Debut
Si R =Nil alors
Retourner (R)
Sinon
Si Info(R)>x alors
Aff_FG(R, SupprimerABR_rec(FG(R), x))
Retourner (R)
Sinon
Si Info(R)<x alors
Aff_FD(R, SupprimerABR_rec(FD(R), x))
Retourner (R)
Sinon // Info(R) = x
Retourner (SupprimerRacine (R)) 78
Fin
OPRATION DE SUPPRESSION
Fonction SupprimerRacine (R:*Tnoeud) : * Tnoeud
Debut
Si FG(R) =Nil alors
Si FD(R) =Nil alors //Cas n1: R est une feuille
LibrerNoeud(R)
Retourner (Null)
Sinon //Cas n2: R possde un FD
DFD(R)
LibrerNoeud(R)
Retourner (D)
Sinon
Si FD(Q) =Nil alors //Cas n2: R possde un FG
GFG(R)
LibrerNoeud(R)
Retourner (G)
Sinon // Cas n3: R possde deux fils
SSuccesseur (R)
Aff_Info (R, Info(S))
Aff_FD(R, SupprimerABR_rec(DF(R), Info(S))) 79
Retourner (R)
Fin
PAR ABR
tant donn un tableau dentiers T (n: sa taille), dire

comment peut on trier ce tableau en utilisant un Arbre

Binaire de Recherche (ABR)?

Exemple:

20 15 10 35 19 13 5 3 12 7 16 40 25 38

80
PAR ABR
1. Insrer toutes les lments du tableau dans un
ABR

20 15 10 35 19 13 5 3 12 7 16 40 25 38

20

15 35

10 25 40
19
5 13 38 81

16
3 7 12
PAR ABR
2. Parcourir lABR en inordre : GRD
20

15 35

10 25 40
19
5 13 38

16
3 7 12

3 5 7 10 12 13 15 16 19 20 25 35 38 40 82
PAR ABR
Procedure Tri_ARB(Var T: Tableau, n: entier)

Debut

RNull

Pour i0 n-1 faire RInsererABR (R, T[i]).

Inordre (R, T); //Parcours Infixe

Fin Indice est une variable globale initialise 0

Procedure Inordre (R: *Tnud, Var T: Tableau)

Si ( R Nil) alors //Arbre nest pas vide

Inordre(FG(R), T))

T[indice]Info(R) //crire la valeur dans le tableau

indice++ 83

Inordre(FD(R), T)
PARTIE IV:
ARBRES BINAIRES DE
RECHERCHE QUILIBRS
(ARBRES AVL)
PLAN DE LA PARTIE IV
Introduction

Dfinition

Techniques dquilibrage

Oprations de Base: Recherche, Insertion et

Suppression
85
INTRODUCTION
La complexit au meilleur des cas de la recherche, de
linsertion et de la suppression dans un ABR est O(h), o
h est la hauteur (ou profondeur) de larbre. Ce cas est
atteint par des arbres quilibrs
Cependant, la complexit au pire cas pour un arbre n
nuds, est O(n). Ce cas est atteint par des arbres trs
dsquilibrs, ou filiformes.
Plusieurs espces des arbres quilibrs ont t
dvelopps: les arbres AVL, les arbres 2-3, les arbres
86
rouge et noir, etc.
INTRODUCTION

ABR Equilibr Filiformes

87 ?

O (h) tel que h = log2(n) O (n) 87


DFINITION
Les arbres AVL ont t introduits par les finlandais Adelson-
Velskii et Landis dans les annes 60.
Un arbre AVL est un ABR quilibr dont:
la diffrence de hauteur (ou profondeur) entre le sous-arbre
gauche et le sous-arbre droit d'un nud R diffre d'au
plus 1.

|Profondeur(FG(R) ) Profondeur(FD(R)) | 1
les arbres gauches et droits d'un nud sont des arbres AVL.
Un champs supplmentaire est ajout tous les nuds: cest le
facteur de dsquilibre (appel aussi facteur de balance88
Bal ) qui est calcul aprs chaque insertion/suppression.
EXEMPLE
Exemple: soit lABR suivant. Est-il un arbre AVL?
Notons:
quune feuille est un
+1
100
arbre de hauteur 0,
et que larbre vide a la +1
50
+1
200
hauteur 1.
Larbre vide et larbre
0
30 0
80 0
150
rduit une feuille,
sont des arbres AVL 0
10 40

vrifier pour chaque nud R, on a:


| Profondeur(FG(R) ) Profondeur(FD(R)) |89<= 1

Cet arbre est un arbre AVL


EXEMPLE
Exemple: Cet ABR est un arbre AVL avant insertion
Insrer la valeur 5 +1
100

+1
50
+1
200

0
30 0
80 0
150

0 0
10 40

90
EXEMPLE
Exemple: Cet ABR est un arbre AVL avant insertion
Insrer la valeur 5
100

Aprs insertion, calculer le


+2 50 +1 200
facteur de dsquilibre de
chaque nud. +1 30 0
80 0
150

+1 10 0 40

5 0

Cet arbre nest pas un arbre AVL aprs insertion de 5 91

arbre dsquilibr
EXEMPLE
Exemple: Cet ABR est un arbre AVL avant insertion
Insrer la valeur 45 +1
100

+1
50
+1
200

0
30 0
80 0
150

0 0
10 40

92
EXEMPLE
Exemple: Cet ABR est un arbre AVL avant insertion
Insrer la valeur 45
100

+2 50 +1 200

-1 30 0
80 0
150

0 10 -1 40

45 0
Cet arbre nest pas un arbre AVL aprs insertion de 45 93

arbre dsquilibr
TECHNIQUES DQUILIBRAGE
Lopration dquilibrage, appele rotation, sapplique tous les
arbres binaires.
Le but des rotations est de pouvoir rquilibrer un ABR.
On opre donc une rotation gauche lorsque larbre est
dsquilibr droite, i.e. son sous-arbre droit est plus haut que
son sous-arbre gauche.
On opre une rotation droite dans le cas contraire savoir son
sous-arbre gauche est plus haut que son sous-arbre droit.
Les rotations ne sont donc dfinies que pour les arbres binaires non
vides dont le sous-arbre gauche (pour rotation gauche) et sous-arbre
droit (pour rotation droite) nest pas vide.
94
Les rotations prservent lordre des donnes dun ABR (parcours
inordre).
TECHNIQUES DQUILIBRAGE
Rotation simple : Rotation droite
Soit A=(B, R, Z) un arbre binaire tel que B=(X, P, Y).

La rotation droite est lopration:

((X, P, Y), R, Z) (X, P, (Y, R, Z))

+2
0
R P
Rotation droite
P 0
+1 R

Z
(hauteur
h)
X
Y (hauteur
h+1)
X
(hauteur
h) Y Z95
(hauteur (hauteur (hauteur
h+1) h) h)

Dsquilibre gauche
TECHNIQUES DQUILIBRAGE
Rotation simple : Rotation droite
Soit A=(B, R, Z) un arbre binaire tel que B=(X, P, Y).

La rotation droite est lopration:

((X, P, Y), R, Z) (X, P, (Y, R, Z))

+2
-1
R P
Rotation droite
P +1
0 R

Z
(hauteur
h-1)
X
(hauteur

X Y h)
Y Z96
(hauteur (hauteur (hauteur
(hauteur h)
h) h) h-1)

Dsquilibre gauche
TECHNIQUES DQUILIBRAGE
Rotation simple : Rotation gauche
Soit A=(X, R, B) un arbre binaire tel que B=(Y, P, Z).

La rotation gauche est lopration:

( X, R, (Y, P, Z)) ((X, R, Y), P, Z)

-2 Rotation gauche 0
R P

-1 0 R
P

X
Z
(hauteur
h)
Y
(hauteur Z X Y (hauteur
h+1)
h) (hauteur (hauteur h)
h+1)
(hauteur h) 97

Dsquilibre droit
TECHNIQUES DQUILIBRAGE
Rotation simple : Rotation gauche
Soit A=(X, R, B) un arbre binaire tel que B=(Y, P, Z).

La rotation gauche est lopration:

( X, R, (Y, P, Z)) ((X, R, Y), P, Z)

-2 Rotation gauche +1
R P

0 -1 R
P

X
Z
(hauteur
h-1)
X Y
Y Z (hauteur h-1)
(hauteur
(hauteur
h)
(hauteur (hauteur h)
h) h)
98

Dsquilibre droit
TECHNIQUES DQUILIBRAGE
Rotation double : double rotation gauche-droite
Cest une rotation gauche sur le sous arbre-gauche du nud r
suivie dune rotation droite sur le nud r

Rotation gauche Rotation droite


+2 R R Q
+2 0
-1 P +1 Q P R
0 0
D D
Q (h) P (h)

A 0 0
A
(h) C B C D
(h) (h) (h)
(h) (h)

A B
B C (h) (h)
(h) (h)
99

((A, P, (B, Q, C)), R, D) (((A, P, B), Q, C), R, D) ((A, P, B), Q, (C, R, D))
TECHNIQUES DQUILIBRAGE
Rotation double : double rotation gauche-droite
Cest une rotation gauche sur le sous arbre-gauche du nud r
suivie dune rotation droite sur le nud r

Rotation gauche Rotation droite


+2 R R Q
+2 0
-1 P +2 Q P R
0 -1
D D
Q (h) P (h)

A +1 0
A
(h) C B C D
(h) (h) (h)
(h-1) (h-1)

A B
B C (h) (h)
(h) (h-1)
100

((A, P, (B, Q, C)), R, D) (((A, P, B), Q, C), R, D) ((A, P, B), Q, (C, R, D))
TECHNIQUES DQUILIBRAGE
Rotation double : double rotation gauche-droite
Cest une rotation gauche sur le sous arbre-gauche du nud r
suivie dune rotation droite sur le nud r

Rotation gauche Rotation droite


+2 R R Q
+2 0
-1 P +1 Q P R
+1 0
D D
Q (h) P (h)

A -1 +1
A
(h) C B C D
(h) (h-1) (h)
(h) (h)

A B
B C (h) (h-1)
(h-1) (h)
101

((A, P, (B, Q, C)), R, D) (((A, P, B), Q, C), R, D) ((A, P, B), Q, (C, R, D))
TECHNIQUES DQUILIBRAGE
Rotation double : double rotation droite-gauche
Cest une rotation droite sur le sous arbre-droit du nud r suivie
dune rotation gauche sur le nud r

Rotation droite Rotation gauche


-2 R R
Q
-2
0
P Q
A R P
+1 -1
A (h) 0 0
(h) Q P
0 D B 0
(h) (h) A B C D
(h) (h) (h) (h)
B C C D
(h) (h) (h) (h)

102

(A, R, ((B, Q, C), P, D)) (A, R, (B, Q, (C, P, D))) ((A, R, B), Q, (C, P, D))
TECHNIQUES DQUILIBRAGE
Rotation double : double rotation droite-gauche
Cest une rotation droite sur le sous arbre-droit du nud r suivie
dune rotation gauche sur le nud r

Rotation droite Rotation gauche


-2 R R
Q
-2
0
P Q
A R P
+1 -1
A (h) 0 -1
(h) Q P
+1 D B -1
(h) (h) A B C D
(h) (h) (h-1) (h)
B C C D
(h) (h-1) (h-1) (h)

103

(A, R, ((B, Q, C), P, D)) (A, R, (B, Q, (C, P, D))) ((A, R, B), Q, (C, P, D))
TECHNIQUES DQUILIBRAGE
Rotation double : double rotation droite-gauche
Cest une rotation droite sur le sous arbre-droit du nud r suivie
dune rotation gauche sur le nud r

Rotation droite Rotation gauche


-2 R R
Q
-2
0
P Q
A R P
+1 -2
A (h) 1 0
(h) Q P
-1 D B 0
(h) (h-1)
A B C D
(h) (h-1) (h) (h)
B C C D
(h-1) (h) (h) (h)

104

(A, R, ((B, Q, C), P, D)) (A, R, (B, Q, (C, P, D))) ((A, R, B), Q, (C, P, D))
OPERATIONS DE BASE
La recherche est identique celui des ABR car les
arbres AVL sont avant tout des ABR quilibrs.
Linsertion dun lment dans un arbre AVL peut
provoquer un dsquilibre. Donc, pour rtablir lquilibre
(rquilibrer) de larbre aprs une insertion, une seule
rotation ou double rotation suffit.
La suppression dun lment dans un arbre AVL peut
provoquer un dsquilibre. Donc pour rtablir lquilibre
(rquilibrer) de larbre aprs une suppression, il faut
105
jusqu h rotations (h est la hauteur de larbre) ou double
rotations.
INSERTION
Lajout dun nud se fait toujours au niveau dune feuille,
puis on rquilibre larbre AVL si linsertion a
dsquilibr larbre.
Le dsquilibre est rencontr lorsque le facteur
dquilibrage dun nud de larbre gale 2.

106
INSERTION
Exemple: soit la srie de nombres insrer dans un
arbre AVL (2 10 12 4 16 8 6 14 )

2 10 12 4 16 8 6 14 2 10 12 4 16 8 6 14

2
0
2 -2

10 -1
2 10 12 4 16 8 6 14
Rotation simple
2 -1 12 0

10 0 10 0

107

2 0 12 0
INSERTION
Exemple: soit la srie de nombres insrer dans un
arbre AVL (2 10 12 4 16 8 6 14 )

2 10 12 4 16 8 6 14 2 10 12 4 16 8 6 14

10 1
10 0

2 -1 12 0 2 -1 12 -1

4 0 4 0 16 0

108
INSERTION
Exemple: soit la srie de nombres insrer dans un
arbre AVL (2 10 12 4 16 8 6 14 )

2 10 12 4 16 8 6 14
10 1

10 0

2 -2 12 -1

Rotation 4 0
12 -1

simple
4
-1
16 0

0 2 8 0 16 0

109
8 0
INSERTION
Exemple: soit la srie de nombres insrer dans un
arbre AVL (2 10 12 4 16 8 6 14 )

2 10 12 4 16 8 6 14

10 1

4 -1 12 -1

0 2 8 1 16 0

110
6 0
INSERTION
Exemple: soit la srie de nombres insrer dans un
arbre AVL (2 10 12 4 16 8 6 14 )

2 10 12 4 16 8 6 14
1
10 0 10

4 14 0
4 12 Rotation
-1 -2 -1

double
0
2 8 1 16 1 2 8 1 12 16
0
0 0

6 111
6 14 0 0
0
INSERTION
Exemple 2: soit larbre suivant, donner le rsultat aprs
insertion de 7

10

4 14

2 8 12 16

1 6 9

112
INSERTION
Exemple 2: soit larbre ci-dessus, donner le rsultat
aprs insertion de 7

2
10 8
0

4 -1 14 0

Rotation 0
4 10
-1

double
1
2 8 1 12 16
0 0
14 0
1
2 6 -1 9 0
0
1 6 -1 9 0

12 16
0
1 7 0 0
0
7
0 113

Nud insr
INSERTION
Aprs insertion gauche Avant Aprs insertion droite

+1 R 0 R -1 R

h+1 h h h h h+1

+2 R Cas A +1 R 0 R

h+2 h h+1 h h+1 h+1

0 -1 -2 Cas B
R R R

h+1 h+1 h h+1 h h+2


114
INSERTION
Remarques:
Aprs une insertion, seules les nuds qui sont sur le chemin du
point dinsertion la racine sont susceptibles dtre dsquilibrs.
Cas A: Larbre devient non quilibr quand le nouveau nud
insr est un descendant gauche dun nud qui avait un facteur
dquilibrage gal 1
Cas B: Larbre devient non quilibr quand le nouveau nud
insr est un descendant droit dun nud qui avait un facteur
dquilibrage gal -1

115
+2 R Cas A
INSERTION
h+2 h

Avant
+1 R

0 P
h

+2 R h h +2 R

+1 P -1 P
h h

h+1 h h h+1

Si insertion dans le sous-arbre Si insertion dans le sous-arbre droit


116
gauche du fils gauche alors du fils gauche alors Rotation
Rotation Simple droite Double Gauche-Droite
-2 Cas B
R
INSERTION
Avant
h h+2 -1 R

0 P
h

h h

-2 R -2 R

+1 P -1 P
h h

h+1 h h h

Si insertion dans le sous-arbre gauche Si insertion dans le sous-arbre


117
du fils droit alors Rotation Double droit du fils droit alors Rotation
Droite-Gauche Simple gauche
SUPPRESSION
Le principe de la suppression dun lment dans un arbre

AVL est le mme que dans un ABR, c..d. recherche de

llment supprimer, suppression et remplacement, le

cas chant, par llment qui lui immdiatement

infrieur ou suprieur.

Aprs la premire phase de la suppression, la hauteur de

larbre est diminu de 1. Le problme est que cet arbre

nest plus forcment un arbre AVL. Il faut donc 118


le
SUPPRESSION
Sil y a dsquilibre, la rotation applique peut diminuer

son tour la hauteur de larbre et gnrer un nouveau

dsquilibre. En fait les rotations peuvent senchainer en

cascade depuis llment supprim jusqu la racine.

Ainsi, on peut faire jusqu h simple rotations ou double

rotations (h est la hauteur de larbre initial).

119
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 10:

0 0
8 8

4 4
0 -1 0 -1
10 12

14 0
14 -1
1
2 6 -1 9 0 1
2 6 -1 9 0

1 12 16 1 16
7 7
0 0 0 0 0 0
0

120
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 8:

0 0
8 9

4 4
0 -1 0 -2
12 12

14 -1
14 -1
1
2 6 -1 9 0 1
2 6 -1

1 16 1 16
7 7
0 0 0 0 0 0

121
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 8:

1
9
0
9
RSG
0
4
0
4
0 -2 14
12

0 0
14 -1 1
2 6 12 16
1
2 6 -1
-1

1 16 0
1 7 0
7
0 0 0

122
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 12 puis 16:

1
9 9
+2

0
4
0
14 4
0
14
0

0 0
1
2 6 12 16
6
-1 1
2 -1

0
1 7 0
1 7
0 0

123
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 12 puis 16:

+2
9 -1
4
RSD
0
4
0
14 1
2 9
1

1
2 6 -1
1 0 6 -1
14 0

0
0
1 7 0 7
124
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 30:

-1 -1
50 50

+2
30
+1
100
+1
40 100
+1

0
-1 -1
-1
10 40 80 +1 200 -1
10 80 +1 200

+1 0
0
0 0
0
20 70 90 300 0
20 70 90 300
+1

0
125
60 0 60
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 30:

-1
50 -2
50
+2 RDG-D
40 100
+1

20
0 +1
100
-1
-1
10 80 +1 200 0 0
-1
10 40 80 +1 200
+1 0
0
0

20 70 90 300
70 90 0 300 0

+1
0
126
60 0
60
SUPPRESSION
Exemple: soit larbre suivant. Donner le rsultat aprs la
suppression de 30:

-2 0
50 80
RDD-G
0
20
0 +1
100 50 100
-1

0 0
-1 -1
10 40 80 +1 200 20
0 +1
70 90 200
0

70 90 0 300 0
10 40 60 0
300
+1
0 0 0
127
0
60
PARTIE V:
ARBRES BINAIRES
QUILIBRS (TAS)
PLAN DE LA PARTIE V
Dfinition

Hauteur

Oprations de Base: Insertion, Recherche et

Suppression

Implmentation
129

Exemples dApplication
DFINITION
Un TAS (HEAP) invent par Williams Floyd en 1964, est
unarbre binairequi vrifie les deux proprits
suivantes:
Proprit structurelle: arbre binaire complet (ou
parfait), i.e.Tous les niveaux sont totalement remplis
sauf le dernier qui est rempli de la gauche vers la
droite.
Proprit dordre:
TASmin: Cl (pre) Cl(fils) 130

TASmax: Cl (pre) Cl (fils)


DFINITION
Exemple dun TASmin
Cl (pre) Cl (fils)
Le minimum se trouve toujours la racine

4 Minimum

5 6

15 9 7 20

131
16 25 14 12 11 8

Maximum
DFINITION
Exemple dun TASmax
Cl (pre) Cl (fils)
Le maximum se trouve toujours la racine

40 Maximum

35 26

15 19 17 20

132
1 13 14 12 11 8

Minimum
HAUTEUR
Thorme: Un TAS de n nud a une hauteur O(log2 n)
Dmonstration
Soit h, la hauteur dun tas de n nud
Au niveau ih, ni=2i
Donc n = 20 + 21 + 22 + ....+ 2h-1 + c tel que , 0c<2h

n = 2h + c 2h h log2 n O(h) = O(log2 n).


Consquence: Les oprations proportionnelles h sont
O (log2 n)
133
INSERTION
Pour insrer une valeur v dans un TASmin [ou TASmax]

1. Insrer la valeur v la fin du dernier niveau de


larbre.

2. Tant que la valeur du pre de v est plus grande


[petite] que v , changer la valeur du pre de v
avec v .
Ltape 1 permet de vrifier la proprit structurelle et
ltape 2 permet de vrifier la proprit de lordre.

134
INSERTION
Exemple: Soit le TASmin suivant. Donner le rsultat
aprs linsertion 5, 17, 3, 18

6
9

15 10 7 20

16 25 14 12 11 8

135
INSERTION
Exemple: Soit le TASmin suivant.
Insertion 5

6
9

15 10 7 20

16 25 14 12 11 8 5

136
INSERTION
Exemple: Soit le TASmin suivant.
Insertion 17

5
9

15 10 7 6

16 25 14 12 11 8 20 17

137
INSERTION
Exemple: Soit le TASmin suivant.
Insertion 3

5
9

15 10 7 6

16 25 14 12 11 8 20 17

138
3
INSERTION
Exemple: Soit le TASmin suivant.
Insertion 18

5
4

9 10 7 6

15 25 14 12 11 8 20 17

139
16 18
INSERTION
Exercice: Construire un TASmin et un TASmax partir
des valeurs suivantes:

20 15 10 35 19 13 5 3 12 7 16 40 25 38

140
INSERTION
Solution: Construire un TASmin partir des valeurs
suivantes:

20 15 10 35 19 13 5 3 12 7 16 40 25 38

20 15 10 10

15 20 20 19
10 15 15

35 19 35 20 13
10

3
19 13

5 10
5
35 20 15 5

19 19 10
20 15 13

141
35 12 35 20 15 13

3
INSERTION
Solution: Construire un TASmin partir des valeurs
suivantes:

20 15 10 35 19 13 5 3 12 7 16 40 25 38

3 3

5 10 5 10

12 20 15 13 12 7 15 13

35 19 35 19
7 20 16 40 25 38

142
INSERTION
Solution: Construire un TASmax partir des valeurs
suivantes:

20 15 10 35 19 13 5 3 12 7 16 40 25 38

35
20

15 10 20 10

35
15 19
13

143
INSERTION
Solution: Construire un TASmax partir des valeurs
suivantes:

20 15 10 35 19 13 5 3 12 7 16 40 25 38

35

20 13

15 19
10 5

3 7 40
12 16 40

20 35

15 19 13 5 144

3 12 7 16 10
25
INSERTION
Solution: Construire un TASmax partir des valeurs
suivantes:

20 15 10 35 19 13 5 3 12 7 16 40 25 38

40

20 35

15 19 25 5

3 12 7 16 10
13 38

145
INSERTION
Solution: Construire un TASmax partir des valeurs
suivantes:

20 15 10 35 19 13 5 3 12 7 16 40 25 38

40

20 38

15 19 25 35

3 12 7 16 10
13 5

146
INSERTION
Linsertion dune valeur v peut ncessiter O(h) =

O(log2(n)) oprations o h est la hauteur du TAS et n est

son nombre des nuds.

En effet, au pire des cas, lchange peut se remonter la racine

dans le cas o v est infrieure la valeur de la racine, ainsi, il

devient le nouveau minimum

147
RECHERCHE
Pour rechercher une valeur v dans un TASmin [ou

TASmax], on doit parcourir larbre en largeur (niveau par

niveau)

On passera au niveau i si seulement si la valeur v

est suprieure [infrieure] la valeur de lun des

nuds de niveau i-1 .

148
RECHERCHE
Exemple: Soit le TASmin suivant.

7?

6
9

15 10 7 20

16 25 14 12 11 8

149
La valeur existe, fin de recherche
RECHERCHE
Exemple: Soit le TASmin suivant.

8?

6
9

15 10 7 20

16 25 14 12 11 8

150
La valeur existe, fin de recherche
RECHERCHE
Exemple: Soit le TASmin suivant.

3?

6
9

15 10 7 20

16 25 14 12 11 8

151
La valeur nexiste pas , fin de recherche
RECHERCHE
Exemple: Soit le TASmin suivant.

30 ?

6
9

15 10 7 20

16 25 14 12 11 8

152
Fin de recherche, la valeur nexiste pas
RECHERCHE
La recherche d'une valeur v dans un TAS peut
ncessiter O(n) oprations o n est le nombre des nuds.
Pire des cas: Si v est suprieure la valeur maximale du
TASmin [ou infrieure la valeur minimale du TASmax], alors
on doit descendre jusquau dernier niveau en parcourant tous les
nuds pour vrifier que la valeur recherche nexiste pas.

La recherche tant un pr-requis la suppression d'une


valeur v , une suppression peut ncessiter O(n)
oprations aussi.
153
SUPPRESSION
Pour supprimer une valeur v dans un TASmin [ou

TASmax]

1. Rechercher la valeur v , si elle existe on passe


ltape suivante, sinon stop.

2. Soit P le nud contenant la valeur v ,


remplacer la valeur de P par la valeur du dernier
nud du dernier niveau (soit Q ce nud et x sa
valeur). Cela permet de vrifier la proprit
structurelle.
154
SUPPRESSION
Pour supprimer une valeur v dans un TAS min [ou TASmax]

3. Vrifier la proprit dordre:

a. Tant que la valeur x est infrieure [suprieure]

celle du pre, changer la valeur x avec celle du pre.

b. Tant que la valeur x est suprieure [infrieure]

celle de lun de ses fils, changer la valeur x avec celle

du plus petit [grand] de ses fils.

155
SUPPRESSION
Exemple: Soit le TASmin suivant. Donner le rsultat
aprs la suppression de 9, 16, 6 et 4.

6
9

15 10 7 20

16 25 14 12 11 8

156
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 9.

6
9

15 10 7 20

16 25 14 12 11 8

157
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 9, 16.

6
8

15 10 7 20

16 25 14 12 11

158
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 16.

6
8

15 10 7 20

11 25 14 12

159
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 6.

6
8

11 10 7 20

15 25 14 12

160
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 6.

12
8

11 10 7 20

15 25 14

161
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 4.

7
8

11 10 12 20

15 25 14

162
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 4.

14

7
8

11 10 12 20

15 25

163
SUPPRESSION
Exemple: Soit le TASmin suivant.
Suppression de 4.

12
8

11 10 14 20

15 25

164
IMPLMENTATION
Un TAS se reprsente naturellement par un tableau:
Les sommets sont numrots par un parcours en largeur, de
gauche droite.
Le sommet i est rang dans la case dindice i du tableau.

1 4
2 3
6
5
4 5 6 7

15 9 7 20
8 9
16 25 14 12 11 8

10 11 12 13
165

1 2 3 4 5 6 7 8 9 10 11 12 13
IMPLMENTATION
On parle ici de la reprsentation statique
squentielle dun arbre binaire
La case 0 est vide
Indice(racine)=1
Indice(FG)=2*Indice(Pre)
Indice(FD)=2*Indice(Pre)+1
Indice(Pre)= [Indice (Fils)/2]

0 1 2 3 4 5 6 7 8 9 10 11 12 13
?? 4 5 6 15 9 7 20 16 25 14 12 11 8
166
IMPLMENTATION
Exercice:

1. Dfinir la structure de donnes dun TAS dentier.

2. Donner limplmentation du modle de larbre TAS

dentier.

3. Trouver les algorithmes d'insertion, de recherche et

de suppression dans un TASmin.

167
IMPLMENTATION
STRUCTURE DE DONNES

TYPE Tarbre = STRUCTURE

T : TABLEAU[0..Max-1] dentier

Dernier:ENTIER//indicesurladernirecaserempliedu
T(initialis0)

FIN

VAR R : Tarbre

168
IMPLMENTATION
MODLE
Entte Corp
Procdure CreerNoeud (Var R: R.dernier++

Tarbre, x: entier) R.T[dernier]x


Fonction Info (R: Tarbre, Retourner (R.T[i])

i:entier): entier
Procdure Aff_Info (Var R: R.T[i]x

Tarbre, i: entier, x: entier)


Fonction FG (R: Tarbre, Si (2*i R.dernier) alors Retourner (2*i)

i:entier): entier Sinon Retourner (-1)


Fonction FD (R: Tarbre, Si (2*i + 1R.dernier) alors Retourner (2*i + 1)

i:entier): entier Sinon Retourner (-1)


169
Fonction Pre (R: Tarbre, Si (i div 2>0) alors Retourner (i div 2)

i:entier): entier Sinon Retourner (-1)


INSERTION (EXEMPLE ILLUSTRATIF)

4 4

6 6
5 5

15 9 7 20 15 9 7 3

16 25 14 12 11 8 3 16 25 14 12 11 8 20

4 5 6 15 9 7 20 16 25 14 12 11 8 3 4 5 6 15 9 7 3 16 25 14 12 11 8 20

3
4
4
5 3
5

15 9 7 6
15 9 7 6

16 25 14 12 11 8 20
16 25 14 12 11 8 20
170
3 5 4 15 9 7 6 16 25 14 12 11 8 20
4 5 3 15 9 7 6 16 25 14 12 11 8 20
IMPLMENTATION
INSERTION (ALGORITHME)
Procdure Inserer_TASmin(Var R: Tarbre, x: entier)

Var P, i: entier

Dbut

CreerNoeud (R, x);

i R.dernier

P Pre(R, i)

TQ ((P-1) et (Info (R, P) > x)) faire // Info (R, P) <x dans le cas TASmax

Permuter (R, i, P) Procdure Permuter (Var R: Tarbre, i,j: entier)

iP Var tmp: entier


Tmp Info (R, i)
P Pre (R, i)
Aff_Info (R, i, Info (R, j)) 171
FTQ
Aff_Info (R, j, Tmp)
Fin
IMPLMENTATION
RECHERCHE (ALGORITHME)
Fonction Rechercher_TASmin (R: Tarbre, x: entier): entier
Var F:filedattente; i: entier;
Dbut
Si (R.dernier 0) alors // le tableau ou larbre nest pas vide
Enfiler (F, i)
TQ (Non FileVide(F)) faire
Defiler (F, i)
Si Info (R, i) = x alors retourner (i)
Si Info (R, i) <x alors // Info (P) >x dans le cas
TASmax
Si FG(R, i) -1 Alors Enfiler(F,FG(R, i));
Si FD(R, i) -1 Alors Enfiler(F,FD(R, i));
FSi
FTQ
FSi 172

Retourner (-1)
Fin
IMPLMENTATION
RECHERCHE (ALGORITHME)
On peut aussi faire une simple recherche
squentielle dans le tableau T comme suit:

Fonction Rechercher_TAS(R: Tarbre, x: entier): entier


Var i: entier;
Dbut
Pour i 1 R.dernier faire
Si Info (R, i) = x alors retourner (i)
Retourner (-1)
Fin

173
SUPPRESSION (EXEMPLE ILLUSTRATIF (CAS A))
2 2

4 4
8 8

15 9 5 20 15 9 5 20

26 25 14 12 11 6 6 25 14 12 11

2 8 4 15 9 5 20 26 25 14 12 11 6 2 8 4 15 9 5 20 6 25 14 12 11

2 5

4 4
6 8

8 9 5 20 6 9 5 20

15 25 14 12 11 15 25 14 12 11 174

2 6 4 8 9 5 20 15 25 14 12 11 2 8 4 6 9 5 20 15 25 14 12 11
SUPPRESSION (EXEMPLE ILLUSTRATIF (CAS B))
4 26

6 6
5 5

15 9 7 20 15 9 7 20

16 25 14 12 11 26 16 25 14 12 11

4 5 6 15 9 7 20 16 25 14 12 11 26 26 5 6 15 9 7 20 16 25 14 12 11

5 5

6 6
9 26

15 26 7 20 15 9 7 20

16 25 14 12 11 16 25 14 12 11 175

5 9 6 15 26 7 20 16 25 14 12 11 5 26 6 15 9 7 20 16 25 14 12 11
SUPPRESSION (EXEMPLE ILLUSTRATIF (CAS B))

5 5

6 6
9 26

15 26 7 20 15 9 7 20

16 25 14 12 11 16 25 14 12 11

5 9 6 15 26 7 20 16 25 14 12 11 5 26 6 15 9 7 20 16 25 14 12 11

6
9

15 26 7 20

16 25 14 26 11 176
5 9 6 15 12 7 20 16 25 14 26 11
IMPLMENTATION
SUPPRESSION (ALGORITHME)
Procdure Supprimer_TASmin (Var R: Tarbre, x: entier)
Var P, G, D: entier
Dbut
iRechercher_TASmin (R, x) //Etape 1
Si (i -1) alors //llment existe dans le TAS
Aff_Info (R, i, Info (R, R.dernier)); R.Dernier --; // Etape 2
//Etape 3: cas A
P Pre (R, i)
Si (P-1) et (Info (R, P) > Info (R, i))
rpter
Permuter (R, i, P)
iP
P Pre (i)
Jusqu ((P=-1) ou (Info (R, P) Info (R, i)))
177
Sinon
IMPLMENTATION
SUPPRESSION (ALGORITHME)
Procdure Supprimer_TASmin (Var R: Tarbre, x: entier)
Var P, G, D, min: entier
Dbut
..
Sinon
//Etape 3: cas B
min i; fin faux
Rpter
G FG(R, i)
D FD (R, i)
Si ((G -1) et (Info (R, min)> Info (R, G)) alors min G
Si ((D -1) et (Info (R, min)> Info (R, D)) alors min D
Si min i alors Permuter (R, i, min); i min
Sinon fin vrai
178
Jusqu (fin)
Fsi
EXEMPLES DAPPLICATION
Malgr que la recherche et la suppression dans un TAS

sont plus coteuses que dans un ABR ou un AVL, les TAS

sont trs utiles entre autre pour le tri et pour

implmenter les files de priorit.

179
EXEMPLE DAPPLICATION
TRI PAR TAS
tant donn un tableau dentiers T (n: sa taille), dire

comment peut on trier (ordre croissant) ce tableau en

utilisant un TASmin ou TAS max?

Exemple:

20 15 10 35 19 13 5 3 12 7 16 40 25 38

180
EXEMPLE DAPPLICATION
TRI PAR TAS
1. Transformer le tableau en un TASMIN

20 15 10 35 19 13 5 3 12 7 16 40 25 38

5 10

12 7 15 13

35 19 20 16 40 25 38

181
EXEMPLE DAPPLICATION
TRI PAR TAS
2. Extraire n fois le minimum du TASMIN :

5 10

12 7 15 13 5

35 19 7 10
20 16 40 25 38

12 16 15 13

35 19 20 38 40 25

3 5 182
EXEMPLE DAPPLICATION
TRI PAR TAS
2. Extraire n fois le minimum du TASMIN :

12 10

19 16 15 13
10
35 25 20 38 40
12 13

19 16 15 40

35 25 20 38

3 5 7 10 183
EXEMPLE DAPPLICATION
TRI PAR TAS
2. Extraire n fois le minimum du TASMIN :

13
12

16 15
16 13

19 20 38 40
19 20 15 40

35 25
35 25 38

15

16 25

19 20 38 40

35
184

3 5 7 10 12 13 15
EXEMPLE DAPPLICATION
TRI PAR TAS
2. Extraire n fois le minimum du TASMIN :

16 19

19 25 20 25

35 20 38 40 35 40 38

35 25 20

38 40 35 40 35 25

38 38 40
38

40
40
185

3 5 7 10 12 13 15 16 19 20 25 35 38 40
EXEMPLE DAPPLICATION
TRI PAR TAS
Tri_TASmin (Tab: Tableau, n: entier)

Var R: Tarbre

Dbut

R.Dernier 0;

//Construire le TAS

Pour i 0 n-1 faire Insrer_TASmin (R, Tab[i])

// Extraire les minimums

Pour i0 n-1 faire

Tab[i] R.T[1]

Supprimer_TASmin (R, R.T[1]) // supprimer la valeur de la racine


186
FPour

Fin
SOURCES DE CE COURS
N. EL-ALLIA , Cours dAlgorithmique et Structures de donnes dynamiques, Ecole
nationale Suprieure dInformatique (ESI), 2014.
Djamel Eddine ZEGOUR, Cours de Structures de Donnes, Ecole nationale
Suprieure dInformatique (ESI), Disponible sur
http://zegour.esi.dz/Cours/Cours_sdd.htm

W. K. Hidouci, Cours Structures De Donnes et Fichiers, cole nationale Suprieure


dInformatique, Disponible sur hidouci.esi.dz/algo/

B. Boutoumi, Cours dAlgorithmique et Structures de donnes, Universit Saad


Dahlab de Blida, 2014, Disponible sur
https://sites.google.com/a/esi.dz/s-aroussi/algorithmique-et-structure-de-donnees/no

uveau-programme
.
187
A. Aroussi, Cours dAlgorithmique Avanc, Universit Saad Dahlab de Blida, 2015,
Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/Algorithmique
TYPOLOGIE
Arbre binaire : cest un arbre o le degr maximum dun
nud est gal 2.
Arbre m-aire : un arbre m-aire dordre n est un arbre ou le
degr maximum dun nud est gal n.
Arbre de Recherche Binaire : cest un arbre binaire o la cl
de chaque nud est suprieure celles de ses descendants
gauche, et infrieure celles de ses descendants droits.
B-Arbre : Un arbre B dordre n est un arbre o :
la racine a au moins 2 fils
chaque nud, autre que la racine, a entre n/2 et n fils
tous les nuds feuilles sont au mme niveau 188

REPRSENTATION CONTIGE
Reprsentation Squentielle :
TYPE Tnoeud= STRUCTURE
Info : Typeqq
vide: boolen
FIN

Indice 0 1 2 3 4 5
Info - a b e c d
Vide V F F F F F

Chaque nud lindice i a pour:


nud lindice (2i) = fils de gauche. 189
nud lindice (2i+1) = fils de droite.
nud lindice (i div 2) = pre.
EXEMPLE DAPPLICATION
Reprsentation des Expressions Arithmtiques :
Les expressions arithmtiques peuvent tres reprsentes sous
forme d'arbre binaire. Les nuds internes contiennent des
oprateurs, alors que les feuilles contiennent des valeurs
(oprandes).
Exemple: l'expression (a-b)*((c+d)/e) sera reprsente par l'arbre
suivant :
*

- /

a b + e
190

c d
EXEMPLE DAPPLICATION
Reprsentation des Expressions Arithmtiques :
Les diffrentes formes de reprsentation dune expression

arithmtiques peuvent tre trouvs en parcourant larbre:


Le parcours inordre (GRD) donne la forme infixe (forme
normale sans parenthses)
Le postordre (GDR) donne la forme postfixe
Le parcours en prordre (RGD) donne la forme polonaise
prfixe,
Lvaluation dune expression arithmtiques peuvent se faire
en utilisant les diffrentes formes (prordre, postordre et
191
inordre)
EXEMPLE DAPPLICATION
Reprsentation des Expressions Arithmtiques
(Exercice 04):
1. Donner larbre qui prsente lexpression suivante:
5*(((9+8)*(4*6))+7), ~3+2-5*6/2+3, (1+3*4+2)*5
2. Donner ces expressions arithmtiques sous format
infix, postfix et prfix.
3. Ecrire les procdures Infixe (R: *Tnoeud), Postfixe
(R: *Tnoeud) et Prefixe (R: *Tnoeud) qui permet
dafficher lexpression arithmtique sous format infix,
192
postfix et prfix, respectivement.
REPRSENTATION CONTIGE
Reprsentation Squentielle :
Dans cette reprsentation, on limine les pointeurs entiers (FG, FD
et ventuellement Pre), en associant chaque nud de l'arbre une
position fixe prdfinie dans le tableau:
La case dindice 0 sera toujours vide
La case d'indice 1 sera toujours rserve au nud racine de l'arbre,
La case d'indice 2 sera toujours rserve au FG de la racine,
La case d'indice 3 sera toujours rserve au FD de la racine,
En gnral, le FG de la case i se trouvera toujours l'indice 2i et le fd
de la case i se trouvera toujours l'indice 2i+1, alors que le pre de la
case i il sera toujours positionn la case i div 2.

193
i div 2 i 2i 2i+1
Pre . Nud . FG FD .
EXEMPLE DAPPLICATION
Reprsentation des Expressions Arithmtiques
(Exercice 04): Procdure Calcul (op: caractre, op1,
op2, res: chaines de caractres)
5. Ecrire les fonctions Var X, Y, Z: entier
Debut
Eval_Infixe(R: *Tnoeud), // convertir les oprandes en entier
X ConvertirChaineEntier(op1);
Eval_Postfixe(R:*Tnoeud Y ConvertirChaineEntier(op2);
//raliser lopration correspondante
), Eval_Prefixe Selon op
Cas +: ZX+Y
(R:*Tnoeud) qui permet Cas -: ZX-Y
dvaluer lexpression Cas *: ZX*Y
Cas /: ZX/Y
arithmtique en utilisant Cas %: ZX%Y
Finselon
le format infix, postfix //convertir le rsultat en chane de
caractre
et prfix, Res ConvertirEntierChaine(Z) 194
Fin
respectivement.

Vous aimerez peut-être aussi