Académique Documents
Professionnel Documents
Culture Documents
LES ARBRES
Prof:T/OUAHMANE
Les arbres
2
Définitions
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
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
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 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 en profondeur
Les arbres binaires
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 complet
Un arbre binaire est dit complet s’il est localement complet et dont
toutes les feuilles ont la même profondeur.
num(n)=i 2 3
num(FG(n))=2i
4 5
6 7
num(FD(n))=2i+1
9 10
8
Les arbres binaires
2<i<n
le père du noeud d’indice i est à l’indice (i div 2)
15
7 20
6 9 25
Arb=[15, [7, [6, [None], [None]], [9, [None],[None]]], [20, [None], [25, [None],
[None]]]]
Les arbres binaires
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 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
Exemple
25
Maximisation d’un arbre
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
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
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)