logo-ur
Arbres
Thierry Lecroq
Universit´e de Rouen Normandie FRANCE
logo-ur
Plan
1 Les arbres
2 Les arbres binaires
3 Les arbres binaires de recherche
4 Les files de priorit´e
logo-ur
Les arbres
structure non lin´eaire qui permet de hi´erarchiser les donn´ees
exemple typique : organisation de stockage des donn´ees des syst`emes d’exploitation des ordinateurs en r´epertoires et fichiers
logo-ur
Une premi` ere d´ efinition
collection d’´el´ements appel´esnœuds (ou sommets) un nœud particulier : laracine
relation est le parent de
logo-ur
Une d´ efinition r´ ecursive
1 Un nœud seul est un arbre. Dans ce cas le nœud est aussi la racine.
2 Etant donn´´ es un nœud not´e net k arbresT0, T1, . . . , Tk−1 ayant des racines not´eesn0, n1, . . . , nk−1, on construit un nouvel arbre en prenantncomme racine et en posant que nest le parent de n0, n1, . . . , nk−1.T0, T1, . . . , Tk−1 sont alors appel´es les sous-arbres den, et n0, n1, . . . , nk−1 les successeurs(ou enfants) den.
logo-ur
L’arbre vide
L’arbre videne poss`ede aucun nœud.
logo-ur
Quelques d´ efinitions
Soit n0, n1, . . . , np−1 une suite de nœuds tels queni est le parent de ni+1 pour0≤i < p−1 alors une telle suite est appel´ee un chemin.
Lalongueurde ce chemin est p−1 (nombre de nœuds moins un).
Soientaet bdeux nœuds. S’il existe un chemin allant dea`ab alorsa est unant´ec´edent (ouancˆetre) deb etb est undescendantdea.
aest un ant´ec´edent propre(resp. descendantpropre) debsi aest un ant´ec´edent (resp. descendant) deb eta6=b.
Un nœud ne poss´edant pas de descendant propre est appel´e une feuille.
Lahauteur d’un nœud est la longueur maximale d’un chemin allant de ce nœud `a une feuille.
La hauteur de l’arbre est la hauteur de sa racine.
Laprofondeur (ou niveau) d’un nœud est la longueur de l’unique chemin allant de la racine `a ce nœud.
logo-ur
Plan
1 Les arbres
2 Les arbres binaires
3 Les arbres binaires de recherche
4 Les files de priorit´e
logo-ur
Les arbres binaires
D´efinition
Un arbre binaireest : soit un arbre vide ;
soit un arbre dans lequel chaque nœud poss`ede :
I 0 successeur ;
I ou 1 successeur ;
I ou 2 successeurs.
logo-ur
Parcours d’un arbre binaire
Parcours suivant l’ordre pr´efixe (pr´eordre) R visiter la racine
G parcourir le sous-arbre gauche suivant l’ordre pr´efixe D parcourir le sous-arbre droit suivant l’ordre pr´efixe
Parcours suivant l’ordre infixe (sym´etrique)
G parcourir le sous-arbre gauche suivant l’ordre sym´etrique R visiter la racine
D parcourir le sous-arbre droit suivant l’ordre sym´etrique
Parcours suivant l’ordre suffixe (postordre)
G parcourir le sous-arbre gauche suivant l’ordre suffixe D parcourir le sous-arbre droit suivant l’ordre suffixe R visiter la racine
logo-ur
Parcours d’un arbre binaire
Parcours en largeur
Dans l’ordre croissant de profondeur des nœuds
logo-ur
Le TAD arbre binaire
Op´erations
Etant donn´´ es un arbre binaire non videA et deux arbres binairesB et C :
ArbreVide() retourne l’arbre vide ;
EstArbreVide(B) fonction bool´eenne qui retourne vrai siB est vide et faux sinon ;
Racine(A) retourne l’´el´ement situ´e `a la racinde deA Gauche(A) retourne le sous-arbre gauche de A
Droit(A) retourne le sous-arbre droit deA
Construire(x,B,C) retourne un arbre dont la racine contient l’´el´ement xet dont les sous-arbres gauche et droit sont respectivementB etC
logo-ur
Arbres binaires Soit l’arbre binaire
A=hC,hD,hF,hG,hi,hii,hH,hI,hi,hii,hiii,hii,hL,hB,hi,hK,hi,hiii,hM,hi,hN,hi,hA,hi,hiiiiii.
Dessiner l’arbreA;
donner l’´etat de la file `a chaque ´etape du parcours en largeur de l’arbre A;
donner les parcours en profondeur pr´efixe, infixe et suffixe de l’arbre A;
quels sont les arbres binaires dont le parcours pr´efixe est
(c,f,j,i,k,l,n,o) et le parcours infixe est(f,j,c,n,l,o,k,i); quels sont les arbres binaires dont le parcours pr´efixe est
(t,u,x,s,q,r) et le parcours infixe est(u,q,r,s,x,t).
logo-ur
Plan
1 Les arbres
2 Les arbres binaires
3 Les arbres binaires de recherche
4 Les files de priorit´e
logo-ur
Les arbres binaires de recherche (ABR)
D´efinition
Un arbre binaire Aest un arbre binaire de recherche si
1 les ´el´ements plac´es dans les nœuds de Asont pris dans un ensemble totalement ordonn´e
2 pour tout nœudsdeA,x´etant l’´el´ement plac´e danss, tous les
´
el´ements du sous-arbre gauche dessont strictement inf´erieur `ax et tous les ´el´ements du sous-arbre droit de ssont strictement sup´erieur `a x
logo-ur
Insertion d’un ´ el´ ement dans un ABR
La construction d’un ABR s’effectue par insertions successives.
Exemple
A : 8, 10, 6, 12, 9, 7, 2, 4, 5, 11, 13, 3, 1 B : 6, 12, 8, 10, 2, 13, 1, 4, 5, 9, 3, 11, 7
logo-ur
Recherche d’un ´ el´ ement dans un ABR
Recherche(x, A)
1 siEstArbreVide(A) alors 2 Retourner faux
3 sinon six=Racine(A) alors 4 Retourner vrai
5 sinon si x <Racine(A)alors
6 Retourner Recherche(x,Gauche(A)) 7 sinon Retourner Recherche(x,Droit(A))
logo-ur
Insertion d’un ´ el´ ement dans un ABR
Notations
Si A est un arbre binaire alors : soit A est vide (A=hi)
soit A est non vide (A=hr, Ag, Adi)
D´efinition r´ecursive
Si Aest vide alors A+x=hx,hi,hii Si Aest non vide (A=hr, Ag, Adi) alors
I Six=ralorsA+x=A
I Six < ralorsA+x=hr, Ag+x, Adi
I Six > ralorsA+x=hr, Ag, Ad+xi
logo-ur
Suppression du plus grand ´ el´ ement dans un ABR non vide
A=hr, Ag, Adi
A−max(A) =
(Ag si Ad est vide
hr, Ag, Ad−max(Ad)i sinon
logo-ur
Suppression de l’´ el´ ement contenu dans la racine d’un ABR non vide
A=hr, Ag, Adi
A−rac(A) =
Ad siAg est vide
Ag siAdest vide
hmax(Ag), Ag−max(Ag), Adi sinon
logo-ur
Suppression d’un ´ el´ ement quelconque dans un ABR
A=hr, Ag, Adi
Si Aest vide alors A−x=A Sinon A=hr, Ag, Adiet
A−x=
A−rac(A) si x=r hr, Ag−x, Adi si x < r hr, Ag, Ad−xi si x > r
logo-ur
Complexit´ e
d´epend de la forme de l’arbre n nombre d’´el´ements
pire des cas ´el´ements d´ej`a tri´esO(n)
meilleur des cas arbre binaire complet O(logn) en moyenne O(logn)
logo-ur
Tri
Insertion des ´el´ements dans un ABR puis parcours infixe : O(nlogn) en moyenne
logo-ur
Arbres binaires de recherche
Construire les arbres binaires de recherche pour les listes de valeurs suivantes :
L1 = (t,s,i,a,p,e,x,g,m,r,o,n); L2 = (g,r,n,o,s,t,a,p,e,i,x,m).
On consid`ere l’ordre alphab´etique pour ordonner les lettres.
logo-ur
Plan
1 Les arbres
2 Les arbres binaires
3 Les arbres binaires de recherche
4 Les files de priorit´e
logo-ur
File de priorit´ e (ou tas)
Arbre binaire
Tout ´el´ement plac´e `a un nœud est sup´erieur `a ses deux enfants Arbre binaire complet partiellement ordonn´e (ABCPO)
logo-ur
File de priorit´ e
repr´esentation d’un ABCPO `a l’aide d’un tableauT on place la racine en T[1]
si un nœud est plac´e en T[i]
I son enfant gauche est plac´e enT[2i];
I son enfant droit est plac´e enT[2i+ 1];
logo-ur
File de priorit´ e - insertion
insertion d’un ´el´ementx dans une file de priorit´eT `an´el´ements placer x enT[n+ 1]
faire monter x (par ´echanges) jusqu’`a sa place la file contient maintenantn+ 1´el´ements
logo-ur
File de priorit´ e - suppression
suppression de la racine d’une file de priorit´eT `an´el´ements placer x=T[n]enT[1]
faire descendre x (par ´echanges) jusqu’`a sa place la file contient maintenantn−1´el´ements
logo-ur
Tri par tas (Heap Sort)
tri den´el´ements `a l’aide d’une file de priorit´e T insertion des n´el´ements dans T
pour ide 1 `anfaire
I supprimer la racine et la placer enT[n−i+ 1]
logo-ur
Tri par tas
Effectuer toutes les ´etapes du tri par tas avec les listes : L1;
L2.