Vous êtes sur la page 1sur 52

1

LES ARBRES

Prof:T/OUAHMANE
Les arbres
2

Définitions

Un arbre est une structure de données


qui organise les données sous forme
d’un ensemble de nœuds, organisés
de façon hiérarchique, à partir d'un
nœud distingué, appelé racine.
Les arbres
3

Ce type de structure de données est très utilisé


quelle que soit le type d'application. En effet, ce type
de structure de données si elle est bien utilisée
donne de très bonnes performances. On la
retrouvera donc dans les systèmes de bases de
données ou bien encore dans l'organisation d'un
système de fichiers d'un système d'exploitation.
Les arbres
4

Définitions
Un arbre binaire est une structure par
nature récursive. Il est :
 soit vide,
 soit constitué d’une racine et des valeurs
de deux arbres binaires disjoints appelés
sous-arbre gauche et sous-arbre droit de
la racine.
Les arbres
5

Utilisation

Les répertoires sous la plupart des systèmes d'exploitation


actuels (Microsoft Windows, Unix dont Linux et Mac OS X ...)
forment un arbre.
Les arbres
6

Terminologie
 Chaque élément d'un arbre se nomme un nœud.
 Les nœuds sont reliés les uns aux autres par des relations d'ordre ou de hiérarchie.
 Un nœud possède un père, c'est à dire un nœud qui lui est supérieur dans cette
hiérarchie.
 Un nœud possède éventuellement un ou plusieurs fils.
 Il existe un nœud qui n'a pas de père, c'est donc la racine de l'arbre.
 Un nœud qui n'a pas de fils est appelé une feuille.
 Parfois on appelle une feuille un nœud externe tout autre nœud de l'arbre sera alors
appelé un nœud interne.
Les arbres binaires
7

 Un arbre dont les nœuds ne comporteront qu'au maximum n fils est


appelé arbre n-aires.

 Il existe un cas très utilisé : c'est l'arbre binaire.

 Dans un tel arbre, les nœuds ont au maximum 2 fils.

 On appelle la profondeur d'un nœud la distance en terme de nœud par


rapport à l'origine.

 Par convention, la racine est de profondeur 0.


Les arbres binaires
8

Représentation d’un arbre binaire


Les arbres binaires
9

Hauteur d'un arbre


La hauteur de l'arbre est alors la profondeur maximale de ses nœuds. C'est à dire la
profondeur à laquelle il faut descendre dans l'arbre pour trouver le nœud le plus
loin de la racine.

La hauteur d'un arbre est très importante.


c'est un repère de performance.

Dans l'exemple le nœud F est de profondeur 2


et le nœud H est de profondeur 3.

La plupart des algorithmes qui traitent les arbres ont une complexité qui dépend de
la hauteur de l'arbre.
Les arbres binaires
10

Parcours d'un arbre :


Le parcours de l’arbre permet d’accéder aux nœuds de l’arbre:

On distingue deux types de parcours :


 Le parcours en largeur.
 Le parcours en profondeur

 Le parcours en largeur permet d'explorer l'arbre niveau par niveau. C'est à


dire que l'on va parcourir tous les nœuds du niveau un puis ceux du niveau
deux et ainsi de suite jusqu'à l'exploration de tous les nœuds.

 Le parcours en profondeur permet d'explorer l'arbre en explorant jusqu'au


bout une branche pour passer à la suivante.
Les arbres binaires
11

Parcours en largeur 1

2 3

4 5 6

7 8 9

1 2 3 4 5 6 7 8 9
Les arbres binaires
12

Parcours en profondeur
 Parcours préfixe, ou proèdre (NGD) :
 Tout Noeud est suivi des noeuds de son sous-arbre Gauche puis
des nœuds de son sous-arbre Droit

 Parcours infixe, ou symétrique (GND) :


 Tout Noeud est précédé des noeuds de son sous-arbre Gauche et
suivi des noeuds de son sous-arbre Droit

 Parcours suffixe, post-fixe, ou post-ordre (GDN) :


 Tout Noeud est précédé des noeuds de son sous-arbre Gauche et
des noeuds de son sous-arbre Droit

 On trouve aussi les parcours 'droite-gauche'


Les arbres binaires

Parcours en profondeur
Les arbres binaires

Parcours en profondeur préfixe (NGD)


1

2 3

4 5 6

7 8 9

1 2 4 5 7 8 3 6 9
Les arbres binaires
Parcours en profondeur infixe (GND)

2 3

4 5 6

7 8 9

4 2 7 5 8 1 3 9 6
Les arbres binaires
Parcours en profondeur postfixe (GDN)
1

2 3

4 5 6

7 8 9

4 7 8 5 2 9 6 3 1
Les arbres binaires
17

Arbre localement complet(entier)


Un arbre binaire localement complet est un arbre binaire dont
chacun des nœuds possèdent soit 0 soit 2 fils. les nœuds
internes auront tous deux fils.
Les arbres binaires
18

Arbre complet

 Un arbre binaire est dit complet s’il est localement complet et dont
toutes les feuilles ont la même profondeur.

 Dans ce type d'arbre, on peut exprimer le nombre de nœuds n de


l'arbre en fonction de la hauteur h : n = 2(h+1) -1.
Les arbres binaires

Arbre binaire parfait : tous les niveaux sont complètement


remplis, sauf éventuellement le dernier niveau. Dans ce dernier
cas les nœuds (feuilles) du dernier niveau sont groupés le plus à
gauche possible.
imparfait
parfait
Les arbres binaires

Numérotation hiérarchique des nœuds

 Numéroter en ordre croissant à partir de 1 tous les


nœuds
 num(r)=1 1

 num(n)=i 2 3

 num(FG(n))=2i
4 5
6 7
 num(FD(n))=2i+1

9 10
8
Les arbres binaires

Numérotation hiérarchique des noeuds

 2<i<n
 le père du noeud d’indice i est à l’indice (i div 2)

 1 < i < (n div 2)


 le fils gauche du nœud d’indice i est en 2i
 le fils droit du nœud d’indice i est en 2i+1
Les arbres binaires

Représentation sous forme d’une liste

15

7 20

6 9 25

Arb=[15, [7, [6, [None], [None]], [9, [None],[None]]], [20, [None], [25, [None],
[None]]]]
Les arbres binaires

Représentation d’un arbre parfait


 Codage d’un arbre binaire parfait avec N nœuds par une liste de N éléments

1a

2b 3c
1 2 3 4 5 6 7 8 9 10
4d 5e 6f 7g
a b c d e f g h i j

10 j
8h 9i

 Un arbre binaire parfait comportant p nœuds et de hauteur


log2(p)
Arbre binaire maximier

Un arbre est dit maximier (ou encore tas) s’il est parfait et que
chaque nœud est de valeur supérieure à celles de ses
deux fils

 Un arbre vide est considéré comme un maximier.


 Un arbre binaire non vide est un maximier si et seulement si
 sa racine porte la valeur maximale.
 ses 2 sous-arbres principaux sont des maximiers.
 À la racine des 2 sous-arbres principaux on trouve donc les
2ème et 3ème valeurs selon l’ordre décroissant.
 On a un ordre partiel :
 Le père est plus grand que ses deux fils.
 Pas d’ordre entre les frères.
24
Les arbres binaires

Exemple

25
Maximisation d’un arbre

 Pour construire un maximier à partir d'un arbre


quelconque, on tamise les racines de chaque sous-arbre,
de bas en haut et de droite à gauche

 Algorithme de maximisation de l’arbre:


 Pour chaque nœud de bas en haut et de droite à gauche faire :
 Comparer les fils
 Comparer les nœuds avec le plus grand des fils
 Echanger le nœud avec le plus grand des fils

26
Tamisage d’un élément

27
Tamisage de la racine d’un arbre

28
Maximisation d’un arbre binaire

29
Maximisation d’un arbre binaire

30
 Pour organiser un tableau en tas, on peut choisir
deux solutions :
 remonter tous les éléments, en partant du second,
jusqu’au dernier.
 descendre tous les éléments, en partant du milieu, vers
le début.
 On choisi la 1er méthode, écrire une fonction
remonter qui permet de remonter l'élément de
rang n à sa place dans le tas formés par les
éléments précédents
 def remonter(t,n):
if(n==1):
return
elif t[n-1] > t[n//2 - 1]:
aux = t[n-1]
t[n-1] = t[n//2 - 1]
t[n//2 - 1] = aux
remonter(t,n//2)
 def remonter(t,n):
if(n==1):
if t[2]>t[0]:
t[2],t[0]=t[0],t[2]
return
elif t[n-1] > t[n//2 - 1]:
aux = t[n-1]
t[n-1] = t[n//2 - 1]
t[n//2 - 1] = aux
remonter(t,n//2)
 def organiserTas(t,n):
for i in range(2,n):
remonter(t, i)
 def triParTas(L):
n=len(L)
k=n
for i in range(n):
organiserTas(L,k)
L[0],L[k-1]=L[k-1],L[0]
k=k-1
Tri Maximier

 appelé aussi «tri par tas» ou «heapsort» ou «tri


de Williams»

 Algorithme
 Pour i de 0 à n-2 faire:
 Rendre l’arbre courant maximier
 échanger la racine avec le dernier élément de l’arbre
 Reconsidérer l’arbre sans dernier élément
36
Tri Maximier

37
Tri Maximier

38
Tri Maximier

39
Tri Maximier

40
Tri Maximier

41
Tri Maximier

42
Tri Maximier

43
Tri Maximier

44
Tri Maximier

45
Tri Maximier

46
Tri Maximier

47
Tri Maximier

48
Tri Maximier

49
TP : Les arbres

 Ecrire une fonction qui permet de parcourir en


profondeur un arbre représenté par une liste

 Ecrire une fonction qui permet de tamiser la racine d’une


sous arbre dont l’indice est passé en paramètre

 Ecrire une fonction qui réalise un tri maximier


Tri Maximier

def tamiser(AB,i,n):
j=2*i+1
while(j<=n):
if j<n and AB[j]<AB[j+1]:
j=j+1
if AB[i]<AB[j]:
AB[i],AB[j]=AB[j],AB[i]
i=j
j=2*i+1
def triMaximier(L):
n=len(L)-1
def maximier(AB): maximiser(L)
n=len(AB) for i in range(n,0,-1):
for i in range(n//2,-1,-1):
L[i],L[0]=L[0],L[i]
tamiser(AB,i,n-1)
tamiser(L,0,i-1)

Vous aimerez peut-être aussi