Vous êtes sur la page 1sur 41

1/41

Algorithmique et structure de donnees


Fili`
ere G
enie Informatique
2013-2014

Mustapha KCHIKECH

Ecole
Sup
erieure de Technologie Safi
Universit
e Cadi Ayyad

D
epartement de Math
ematiques et Informatique
Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

2/41

Chapitre IV

Les arbres binaires


1
2

4
8

5
9

10

11 12

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

3/41

1. Introduction

Un arbre est une structure de donn


ees particuli`
ere qui sert `
a stocker et
manipuler des donn
ees dans des ensembles dynamiques.
Sa particularit
e r
eside dans son concept dorganisation de donn
ees dune
mani`
ere hi
erarchique.
En effet, lorganisation des donn
ees consiste `
a relier les informations sur ces
donn
ees par le biais des branches de larbre.
Ceci permet un acc`
es rapide aux informations stock
ees dans larbre et la
possibilit
e dajouter et de supprimer, dune mani`
ere
egalement rapide, des
el
ements dans larbre.

Par ailleurs, les structures de donn


ees arbres repr
esentent lun des concepts
algorithmiques les plus importants de linformatique.
Ils sont utilis
es dans plusieurs types dapplications informatiques. Exemple des
utilisations les plus connus est la gestion des syst`
emes de bases de donn
ees,
lorganisation des syst`
emes de fichiers dun syst`
eme dexploitation ou
combinatoire des mots, codage, etc.

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

4/41

2. Arbres binaires : 2.1 presentation generale

On peut pr
esent
e un arbre comme
etant un nud ou une suite de sous-arbres.
Un arbre peut
etre un arbres enracin
e (avec racine) ou arbre non enracin
e (sans
racine).
Il existe plusieurs type darbres mais, vu leur int
er
et en informatique, nous allons
etudier dans ce chapitre seulement les arbres binaires.

Dans un arbre binaire, un nud d


esigne l
el
ement de linformation et les
branches vers dautres nuds.
Les nuds sont reli
es les uns aux autres par des relations dordre ou de
hi
erarchie.
Ainsi, chaque nud pourrait avoir un p`
ere (nud qui lui est sup
erieur dans la
hi
erarchie), un ou deux fils : fils gauche et fils droit.
La racine est le nud qui na pas de p`
ere, cest donc la racine de larbre. La
racine est le nud qui impose un sens de parcours de larbre.
Un nud qui na pas de fils est appel
e une feuille.
Le reste des nuds de larbre seront alors appel
es un nuds internes.

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

5/41

2. Arbres binaires : 2.1 presentation generale


Exemple :

racine

nud interne

nud interne

feuille

nud interne

nud interne

feuille

feuille

feuille

feuille

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

6/41

2. Arbres binaires : 2.1 presentation generale

Operations sur les arbres binaires :


Dans un arbre binaire, on peut effectuer plusieurs op
erations par exemple :
1
2
3
4
5
6
7
8
9

initialiser un arbre binaire,


tester si un arbre est vide,
cr
eer larbre gauche et larbre droit dun arbre binaire,
parcourir un arbre,
ajouter un
el
ement `
a un arbre,
supprimer un
el
ement dun arbre,
r
ecup
erer un
el
ement dun arbre,
vider un arbre.
...

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

7/41

2. Arbres binaires : 2.2 Implantation

Declaration dun arbre binaire :


Comme le cas des listes chan
ee, les piles et les files, le langage C permet de r
ealiser des arbres binaires `
a
laide des structures.
En effet, chaque noud de larbre est un objet constitu
e:
dun champ de donn
ees,
dun pointeur vers le fils gauche (sous-arbre gauche).
dun pointeur vers le fils droit (sous-arbre droit).
La d
eclaration correspondante est la suivante, o`
u lon suppose ici que les valeurs stock
ees dans larbre sont
de type entier.

Code en C

nud
donnees
fils gauche fils droit

Fili`
ere G
enie Informatique 2013-2014

typedef int element;


struct nud
{
element valeur;
struct nud * filsG;
struct nud * filsD;
};
typedef struct nud nud, * arbreB;

Algorithmique et structure de donn


ees

8/41

2. Arbres binaires : 2.2 Implantation

Creation et initialisation dun arbre binaire :


Pour cr
eer un arbre binaire, on doit linitialiser `
a NULL, cela va nous permettre
dallouer le premier nud.
Linitialisation dun arbre binaire, ou la cr
eation dun arbre binaire, est r
ealis
ee
par la fonction suivante :
arbreB arbreBVide( )
{
return NULL;
}
Pour tester si un arbre binaire est vide, on utilise la fonction suivante :
int testerArbreBVide(arbreB a)
{
return a==NULL;
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

9/41

2. Arbres binaires : 2.2 Implantation


Pour cr
eer un arbre binaire, Il faut tout dabord cr
eer un nud, ensuite on
construit, dune mani`
ere recursive, les sous-arbres gauche et droit.
Pour ceci, nous allons d
efinir deux fonctions qui permettent de donner le fils
gauche, le fils droit dun nud et une fonction qui permet de cr
eer un nud
Fonctions qui donnent le fils gauche et le fils droit dun nud :
arbreB filsGauche(arbreB a)
{
if(a==NULL)
return NULL;
return a->filsG;
}

arbreB filsDroit(arbreB a)
{
if(a==NULL)
return NULL;
return a->filsD;
}

Fonction qui permet de cr


eer un nud :
arbreB creeNoeud(element val,arbreB fg, arbreB fd)
{
arbreB a=malloc(sizeof(nud));
a->valeur=val;
a->filsG=fg;
a->filsD=fd;
return a;
}
Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

10/41

2. Arbres binaires : 2.2 Implantation

Creation dun arbre binaire : Ajout dun element


La structure dun arbre binaire, rend lop
eration dAjout dun
el
ement un peu
d
elicat.
En effet, il existe diff
erentes facons dins
erer un
el
ement dans un arbre binaire :
On ins`
ere des
el
ements d`
es que lon peut.
On ins`
ere des
el
ements de facon `
a obtenir un arbre qui se rapproche le
plus possible dun arbre complet (chaque nud poss`
ede 0 ou 2 fils.),
On ins`
ere de facon `
a avoir une certaine logique dans larbre binaire `
a
construire.
La premi`
ere m
ethode dajout est la plus simple, d`
es que lon trouve un nud qui
a un fils vide, on y met le sous-arbre que lon veut ins
erer.
Mais cette m
ethode pr
esente un inconv
enient. En effet, larbre construit est un
arbre tr`
es particulier connu sous le nom darbre peigne (arbre o`
u tous les fils
droit (ou gauche) des nuds internes sont des feuilles. Voici le code en C de
cette m
ethode.

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

11/41

2. Arbres binaires : 2.2 Implantation


Fonction qui ajoute des nuds c
ot
e gauche :
arbreB ajouterGElementArbreB(arbreB a, element val)
{
if(a==NULL)
a=creeNoeud(val,NULL,NULL);
else if(filsGauche(a)==NULL)
a->filsG=creeNoeud(val,NULL,NULL);
else if(filsDroit(a)==NULL)
a->filsD=creeNoeud(val,NULL,NULL);
else
a->filsG=ajouterGElementArbreB(filsGauche(a), val);
return a;
}

Fonction qui ajoute des nuds c


ot
e droit :
arbreB ajouterDElementArbreB(arbreB a, element val)
{
if(a==NULL)
a=creeNoeud(val,NULL,NULL);
else if(filsGauche(a)==NULL)
a->filsG=creeNoeud(val,NULL,NULL);
else if(filsDroit(a)==NULL)
a->filsD=creeNoeud(val,NULL,NULL);
else
a->filsD=ajouterDElementArbreB(filsDroit(a), val);
return a;
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

12/41

2. Arbres binaires : 2.2 Implantation


Ajout dun element : arbre binaire de recherche
On remarque la cr
eation darbres avec la premi`
ere m
ethode nest pas pratique.
On pr
esente une autre facon de cr
eer des arbres binaires en se basant sur une
logique. Les arbres binaires de recherche.
Ce type darbre, il y a une coh
erence entre les nuds, cest `
a dire que la
hierarchie des nuds respecte une r`
egle.
Pour un arbre binaire de recherche contenant des entiers, les valeurs des nuds
des sous-arbres gauche sont inf
erieures `
a la racine de ce nud,
et les valeurs des sous-arbres droit sont sup
erieurs `
a cette racine.
Exemple :
18

16

23

12

11

17

13

16

Fili`
ere G
enie Informatique 2013-2014

22

17

27

21

Algorithmique et structure de donn


ees

13/41

2. Arbres binaires : 2.2 Implantation

Ajout dun element : arbre binaire de recherche


Fonction qui ajoute des nuds dans arbre binaire de recherche :
arbreB AjoutarbreRecherche(arbreB a, element val)
{
if(a==NULL)
a=creeNoeud(val,NULL,NULL);
else if(a->valeur >= val)
a->filsG=AjoutarbreRecherche(filsGauche(a), val);
else
a->filsD=AjoutarbreRecherche(filsDroit(a), val);
return a;
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

14/41

2. Arbres binaires : 2.3 Fonctions de base

Fonction qui teste si un nuds est une feuille,


Fonction qui teste si un nuds est un nuds interne,
Fonction qui calcule le nombre de nuds dun arbre binaire,
Fonction qui calcule le nombre de nuds internes dun arbre binaire,
Fonction qui calcule le nombre de feuilles dun arbre binaire,
Fonction qui calcule la hauteur dun arbre binaire,

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

15/41

2. Arbres binaires : 2.3 Fonctions de base

Tester si un nud est une feuille


int noeudEstFeuille(arbreB a)
{
if(a==NULL)
return 0;
if(a->filsD==NULL && a->filsG==NULL)
return 1;
return 0;
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

16/41

2. Arbres binaires : 2.3 Fonctions de base

Tester si un nud est un nud interne


int noeudEstInterne(arbreB a)
{
return !noeudEstFeuille(a);
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

17/41

2. Arbres binaires : 2.3 Fonctions de base

Calculer le nombre de nuds


int nbrNoeud(arbreB a)
{
if(a==NULL)
return 0;
return 1+nbrNoeud(filsDroit(a))+nbrNoeud(filsGauche(a));
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

18/41

2. Arbres binaires : 2.3 Fonctions de base

Calculer le nombre de nuds internes


int nbrNoeudInter(arbreB a)
{
if(a==NULL)
return 0;
if(noeudInterne(a)==0)
return 0;
return 1+nbrNoeudInter(filsDroit(a))+nbrNoeudInter(filsGauche(a));
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

19/41

2. Arbres binaires : 2.3 Fonctions de base

Calculer le nombre de feuilles


int nbrFeuille(arbreB a)
{
if(a==NULL)
return 0;
if(noeudFeuille(a)==1)
return 1;
return nbrFeuille(filsDroit(a))+nbrFeuille(filsGauche(a));
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

20/41

2. Arbres binaires : 2.3 Fonctions de base

Calculer la hauteur
int hauteurArbre(arbreB a)
{
if(a==NULL)
return 0;
return 1+max(hauteurArbre(filsDroit(a)),hauteurArbre(filsGauche(a)));
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

21/41

2. Arbres binaires : 2.4 Parcours dun arbre

Pour pouvoir traiter les donn


ees stock
ees dans un arbre binaire, il faut parvenir
a atteindre les nuds contenants ces donn
ees.
`
Ceci demande des m
ethodes ou des algorithmes qui permettent dexplorer un
arbre dans le but de visiter tous ses nuds.
Il existe deux m
ethodes de parcours dun arbre binaire :
le parcours en profondeur :
Le parcours en largeur :

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

22/41

2. Arbres binaires : 2.4 Parcours dun arbre

Parcours en profondeur
Parcours en profondeur : permet dexplorer larbre en explorant jusquau bout
une branche pour passer `
a la suivante.
Dans le parcours en profondeur, on distingue trois types de parcours :
parcours pr
efixe : On explore la racine de larbre, on parcourt tout le
sous-arbre de gauche, une fois quil ny a plus de sous-arbre gauche on
parcourt les
el
ements du sous-arbre droit. Parcours RGD
(Racine-Gauche-Droit)
parcours infixe : explore la racine apr`
es avoir trait
e le sous-arbre gauche,
apr`
es traitement de la racine, on traite le sous-arbre droit. Parcours GRD
(Gauche-Racine-Droit).
parcours suffixe (ou postfixe) : explore le sous-arbre gauche, le sous-arbre
droit puis la racine. Parcours GDR (Gauche-Droit-Racine).

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

23/41

2. Arbres binaires : 2.4 Parcours dun arbre

Parcours en profondeur : Parcours prefixe


Principe : pour chaque nud, on visite la racine puis le fils gauche et en dernier
le fils droit.
void prcoursPrefixe(arbreB a)
{
if(a!=NULL)
{
printf("%d ",a->valeur);//<-- ici visit
e (trait
e)
prcoursPrefixe(filsGauche(a));
prcoursPrefixe(filsDroit(a));
}
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

24/41

2. Arbres binaires : 2.4 Parcours dun arbre

Parcours en profondeur : Parcours Infixe


Principe : pour chaque nud, on visite le fils gauche puis la racine et en dernier
le fils droit.
void prcoursInfixe(arbreB a)
{
if(a!=NULL)
{
prcoursInfixe(filsGauche(a));
printf("%d ",a->valeur);//<-- ici visit
e (trait
e)
prcoursInfixe(filsDroit(a));
}
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

25/41

2. Arbres binaires : 2.4 Parcours dun arbre

Parcours en profondeur : Parcours suffixe (postefixe)


Principe : pour chaque nud, on visite le fils gauche puis le fils droit et en
dernier la racine.
void prcoursSuffixe(arbreB a)
{
if(a!=NULL)
{
prcoursSuffixe(filsGauche(a));
prcoursSuffixe(filsDroit(a));
printf("%d ",a->valeur);//<-- ici visit
e (trait
e)
}
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

26/41

2. Arbres binaires : 2.4 Parcours dun arbre

Parcours en largeur
Le parcours en largeur : permet dexplorer larbre niveau par niveau.
Lalgorithme du parcours en largeur consiste `
a utiliser une file pour garder en
m
emoire les fils du nuds visit
e dans chaque niveau pour les traiter apr`
es.
void parcoursLargeur(arbreB a)
{
File f=NULL;
arbreB atmp;//<-- nud temporaire
if(a!=NULL)
{
f=enfiler(a,f);
while( f!=NULL)
{
atmp=defiler(&f);
printf("%d ",atmp->valeur);//<-- ici visit
e (trait
e)
if(filsGauche(atmp)!=NULL)
f=enfiler(atmp->filsG,f);//<-- ici mettre en m
emoire le fils gauche
if(filsDroit(atmp)!=NULL)
f=enfiler(atmp->filsD,f);//<-- ici mettre en m
emoire le fils droit
}
}
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

27/41

2. Arbres binaires : 2.5 Recherche dans un arbre


La recherche dune valeur stock
ee dans un arbre est une op
eration tr`
es
courantes sur les arbres binaires.
On distingue principalement deux m
ethodes de recherche li
ees au type de larbre
binaire consid
er
e.
Si larbre est quelconque.
Si larbre est un arbre de recherche.
Lobjectif de la recherche est de d
eterminer si la valeur existe dans larbre.

Recherche dans un arbre binaire quelconque


Principe : La fonction commence sa recherche `
a la racine. Pour chaque nud
visit
e, si la valeur recherch
ee est trouv
ee, la recherche est termin
ee. Sinon, la
recherche continue dans le sous-arbre gauche et le sous-arbre droit.
int rechercherEltArbre(arbreB a,element val)
{
if(a==NULL)
return 0;
if(a->valeur==val)
return 1;
return (rechercherEltArbre(filsGauche(a), val) || rechercherEltArbre(filsDroit(a), val) );
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

28/41

2. Arbres binaires : 2.5 Recherche dans un arbre

Recherche dans un arbre binaire de recherche


Contrairement `
a la recherche dans un arbre quelconque o`
u il faut parcourir
quasiment tous les nuds de larbre pour d
eterminer si l
el
ement existe,
la recherche dans un arbre binaire de recherche permet de parcourir seulement
une branche de larbre.
Principe : La fonction commence sa recherche `
a la racine. Pour chaque nud
visit
e, si la valeur recherch
ee est trouv
ee, la recherche est termin
ee. Sinon, la
recherche continue dans le sous-arbre gauche ou le sous-arbre droit.
int rechercherEltArbreRech(arbreB a,element val)
{
if(a==NULL)
return 0;
if(a->valeur==val)
return 1;
if(a->valeur>=val)
return rechercherEltArbreRech(filsGauche(a), val);
return rechercherEltArbreRech(filsDroit(a), val)
}

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

29/41

2. Arbres binaires : 2.6 Suppression dun element dans arbre binaire

La suppression dune valeur (ou un nud) dans un arbre est une op


eration plus
complexe.
En effet, supprimer un
el
ement dans un arbre revient `
a d
etruire le nud
contenant cet
el
ement.
Cependant, un nud ayant des fils sil est supprim
e, entrane une r
eorganisation
de larbre.
Autrement, que faire alors des sous-arbres du nud `
a supprimer ?
La r
eponse d
epend du type de larbre trait
e.
Si larbre consid
er
e est un arbre binaire de recherche, on peut supprimer
un nud tout en gardant laspect de cet arbre, c-`
a-d garder lorganisation
de larbre selon le concept des arbres binaires de recherche.
Si larbre consid
er
e est un arbre binaire quelconque, on peut supprimer le
nud et ses sous-arbres ou supprimer seulement le nud.
Dans la suite, nous allons pr
esenter une fonction qui permet de supprimer un
nud dans un arbre binaire de recherche sans supprimer ses fils.
Une autre fonction qui permet de d
etruire compl`
etement un nud et ses
descendants.
Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

30/41

2. Arbres binaires : 2.6 Suppression dun element dans arbre binaire

Suppression dun element dans un arbre binaire de recherche


Principe : Si n est le nud qui contient l
el
ement `
a supprimer, alors trois cas
sont envisageables :
Si n est une feuille, alors on le supprime.
Si n est un nud ayant un seul fils, alors on supprime n et on le remplace
par ce fils.
Si n est un nud ayant deux fils (gauche et droit), alors on cherche dans
le sous-arbre gauche la feuille x qui porte le plus grand
el
ement. Ensuite,
on remplace le contenu de n par le contenu de x , et on supprime x .
Trois fonctions coop`
erent pour r
ealiser cette t
ache :
une fonction permet de supprimer la racine dun nud.
une fonction permet de d
eterminer le maximum des
el
ements dun arbre
binaire de recherche.
une fonction permet de supprimer un
el
ement dans un arbre binaire de
recherche.
Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

31/41

2. Arbres binaires : 2.6 Suppression dun element dans arbre binaire

Exemple 1 : Suppression dune feuille


20

20

16

23

12

17

11 13

16 19

22

27

21

16

23

12

17

11 13

16 19

22

27

Exemple 2 : Suppression dun nud `


a deux fils
20

20

16

23

12

17

11 13

16 19

22

27

21

Fili`
ere G
enie Informatique 2013-2014

13
12
11

23
17
16 19

Algorithmique et structure de donn


ees

22

27

32/41

2. Arbres binaires : 2.6 Suppression dun element dans arbre binaire

Code en C
Maximum dun arbre binaire de recherche
arbreB MaxArbreRech(arbreB a)
{
if(a->filsD == NULL)
return a;
return MaxArbreRech(a->filsD);
}

Supprimer la racine dun nud


arbreB supprimerRacine(arbreB a)
{
arbreB tmp;
arbreB supprimerElt((int v, arbreB a);
if(a->filsG == NULL)
return a->filsD;
if(a->filsD == NULL)
return a->filsG;
tmp = MaxArbreRech(a->filsG);
a->valeur= tmp->valeur;
a->filsG = supprimerElt((tmp->valeur, a->filsG);
return a;
}

Fili`
ere G
enie Informatique 2013-2014

Supprimer la valeur dun nud


arbreB supprimerElt(int v, arbreB a)
{
if(a== NULL)
return a;
if(v == a->valeur)
return supprimerRacine(a);
if(v < a->valeur)
a->filsG = supprimerElt(v, a->filsG);
else
a->filsD = supprimerElt(v, a->filsD);
return a;
}

Algorithmique et structure de donn


ees

33/41

2. Arbres binaires : 2.6 Suppression dun element dans arbre binaire

Suppression dun element dans un arbre binaire quelconque


Principe : Si n est le nud qui contient l
el
ement `
a supprimer, alors on
etement larbre de racine n.
supprime compl`
Lid
ee est de supprimer les feuilles une par unes. On r
eit`
ere lop
eration autant
de fois quil y a de feuilles.
Exemple :
3

16
18
1

25
10

12 20

29

16

11

Fili`
ere G
enie Informatique 2013-2014

25

18
1

1
3

Algorithmique et structure de donn


ees

11

29

34/41

2. Arbres binaires : 2.6 Suppression dun element dans arbre binaire

Code en C
Vider un arbre
arbreB viderArbreB(arbreB a)
{
arbreB aG;
arbreB aD;
if(a!= NULL)
{
aG = a->filsG;
aD = a->filsD;
a->filsG=viderArbreB(aG);
a->filsD=viderArbreB(aD);
free(a);
a=NULL;
return a;
}
return NULL;
}

Fili`
ere G
enie Informatique 2013-2014

Supprimer un nud
arbreB supprimerNoeudQcq(int v, arbreB a)
{
arbreB tmp;
if(a== NULL)
return a;
if(v == a->valeur)
{
tmp=a;
return viderArbreB(tmp);
}
if(rechercherArbre(filsGauche(a), v))
a->filsG = supprimerNoeudQcq(v, a->filsG);
else
a->filsD = supprimerNoeudQcq(v, a->filsD);
return a;
}

Algorithmique et structure de donn


ees

35/41

2. Arbres binaires : Arbres binaires equilibres AVL

Motivation et Presentation
Nous avons vu que les op
erations dinsertion ou de suppression des
el
ements
dans un arbre binaire de recherche peut donner des arbres totalement
d
es
equilibr
es,
autrement, la diff
erence entre la hauteur des sous-arbres est assez importante. Il
peut y avoir des arbres dont la profondeur est proche leur taille.
Ceci peut influencer le co
ut en temps des traitements sur ce type darbre.
Pour
eviter ce genre darbres, on peut chercher `
a garder un arbre binaire de
recherche sous une forme
equilibr
ee apr`
es chaque op
eration dinsertion ou de
suppression.
En algorithmique, il existe plusieurs types darbres dits
equilibr
es les arbres AVL,
les arbres rouge et noir, les arbres a-b.
Dans la suite, nous traitons le cas des arbres AVL (notion introduite en 1962 par
deux russes Adelson-Velskii et Landis).

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

36/41

2. Arbres binaires : Arbres binaires equilibres AVL

Definition
Un arbre binaire de recherche est un arbre AVL si, pour tout nud de larbre, les
hauteurs des sous-arbres gauche et droit diff`
erent dau plus 1.

Exemple :
18

16

23

12

11

17

13

16

Fili`
ere G
enie Informatique 2013-2014

22

17

27

21

Algorithmique et structure de donn


ees

37/41

2. Arbres binaires : Arbres binaires equilibres AVL


Insertion et suppression
Linsertion (ou la suppression) dans un arbre AVL se fait comme dans un arbre
de recherche sauf quil faut maintenir l
equilibre de larbre.
Pour cela, lors de linsertion (ou suppression), sil peut y avoir un d
es
equilibre
trop important ( 2) entre les deux sous-arbres du nud trait
e il faut cr
eer un
equilibre par des rotations (gauche ou droite).

Les op
erations de rotation transforment la configuration des sous-arbres de
gauche ou de droit sans modifier lordre sym
etrique des nuds (lordre dans le
parcours infixe).
La rotation pr
eserve la propri
et
e darbre binaire de recherche, en revanche elle
peut diminuer la hauteur du sous-arbre.
Rotation : Les rotations sont illustr
ees par la figure suivante :

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

38/41

2. Arbres binaires : Arbres binaires equilibres AVL

Operations sur les arbres AVL :

Equilibrer
: si la hauteur des sous-arbres droit et gauche diff`
ere dau plus de 1,
effectuer une rotation gauche ou droite ou les deux selon la situation.
Insertion : on ajoute un
el
ement `
a larbre AVL dune mani`
ere similaire `
a un
arbre binaire de recherche sauf quil faut pr
eserver l
equilibre `
a chaque insertion.
Suppression : on supprime un
el
ement de larbre AVL dune mani`
ere similaire `
a
un arbre binaire de recherche sauf quil faut pr
eserver l
equilibre `
a chaque
suppression.

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees

39/41

2. Arbres binaires : Arbres binaires equilibres AVL

el
ement 11
Exemple 1 : Ajout l

20
20
16

Insertion

23

16
12

12

RotationD 12

23

16
20

17

17

11

17

23

11
Exemple 2 : Ajout l
el
ement 18

20

20
16
12

23
17

Insertion

16

20
23

RotationG en 16

17

23

17

RotationD

16
12

17

16

12
18

Fili`
ere G
enie Informatique 2013-2014

20

18

12
Algorithmique et structure de donn
ees

18

23

40/41

2. Arbres binaires : Arbres binaires equilibres AVL

Exemple 1 : suppression l
el
ement 22

20

20
16
12

Suppression

23
17

22

16
12

RotationD 12

23

16

11
11

20

17
17

23

11
Exemple 2 : Suppression l
el
ement 25

20
16

20

Suppression

23

16

20
23

RotationG en 16

17

23

17

RotationD

16
12

17

25

12

17

16

12
18

18

Fili`
ere G
enie Informatique 2013-2014

20

18

12
Algorithmique et structure de donn
ees

18

23

41/41

2. Arbres binaires : Arbres binaires equilibres AVL

Implantation dun arbre AVL en C :


Pour implanter en langage C les op
erations dinsertion et de suppression des
el
ements
dans un arbres AVL, il faut
ecrire des fonctions qui permettent
1

deffectuer une rotation gauche sur un arbre binaire de recherche,

deffectuer une rotation droite sur un arbre binaire de recherche,

d
equilibrer un arbre binaire de recherche,

dajouter un
el
ement dans un arbre binaire AVL,

de supprimer un
el
ement dans un arbre binaire AVL,

Ces fonctions seront r


ealis
ees en TD.

Fili`
ere G
enie Informatique 2013-2014

Algorithmique et structure de donn


ees