Vous êtes sur la page 1sur 28

27/05/2021

Chapitre 4
I - INTRODUCTION
Les arbres

Jebli Khouloud Cours ASD2 2020/2021 2

1
27/05/2021

Défini&on Terminologie
• Tout d'abord, chaque élément d'un arbre se nomme un nœud.
• L'arbre est une structure de données qui • Les nœuds sont reliés les uns aux autres par des relations d'ordre
généralise la liste : ou de hiérarchie:
- Un nœud possède un père, c'est à dire un nœud qui lui est supérieur
– alors qu'une cellule de liste a un seul successeur dans cette hiérarchie.
(l’élément suivant), - Il possède éventuellement un ou plusieurs fils.
– dans un arbre il peut y en avoir plusieurs. - Et peut aussi posséder des frères : les frères sont les nœuds qui ont le
même père

• On parle alors de nœud (au lieu de cellule). • Il existe un nœud qui n'a pas de père, c'est la racine de l'arbre.

• Un nœud qui n'a pas de fils est appelé un feuille.


• Précisons maintenant un peu plus les termes
désignant les différents composants d'un arbre. • Parfois on appelle une feuille un nœud externe tout autre nœud de
l'arbre sera alors appelé un nœud interne.

Jebli Khouloud Cours ASD2 2020/2021 3 Jebli Khouloud Cours ASD2 2020/2021 4

2
27/05/2021

Terminologie

Jebli Khouloud Cours ASD2


Jebli Khouloud Cours ASD2 2020/2021 5 6
2020/2021

3
27/05/2021

IUT De Villetaneuse
Dépt informatique

Cours 4 et 5
Les arbres

• Le nœud N1 est le père Exemple 1 1.


: arbre généalogique
Introduction
de tous les nœuds appelé
la racine de l’arbre. 1.1. Définition
• Les nœuds N3, N4, N5 et L'arbre est une structure de donnée qui généralise la
N8 sont des feuilles de cellule de liste a un seul successeur (leur suivant), da
l’arbre. peut y en avoir plusieurs. On parle alors de nœud (au
• Les nœuds N2, N6, N7 Un nœud père peut avoir plusieurs nœud fils. Un fil
sont des nœuds internes père, et tous les nœuds ont un ancêtre commun appel
de l’arbre. l'arbre (le seul nœud qui n'a pas de père).
• La racine est un ancêtre
1.2. Premiers exemples
de tous les nœuds de
l’arbre. Exemple 1 : arbre généalogique
Remarque:
signifie "a "a
signifie pour enfant"
pour enfant"
Jebli Khouloud Cours ASD2 2020/2021 7 Jebli Khouloud Cours ASD2 2020/2021 8
Pierre

Paul Jacques

Louis René Valérie

Exemple 2 : arborescence des répertoires


C:\
4
Program Files Send To
27/05/2021

Exemple 2 : arborescence des


répertoires et des fichiers Arité et degré d'un arbre
• On peut aussi qualifier un arbre sur le nombre de fils qu'il possède.
Ceci s'appelle l'arité de l'arbre.

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


sera d'arité n. On parlera alors d'arbre n-aire.

• L'arité n'impose pas le nombre minimum de fils, il s'agit d'un


maximum, ainsi un arbre d'arité 3 pourra avoir des nœuds qui ont
0,1,2 ou 3 fils, mais pas plus.

• On appelle degré d'un nœud, le nombre de fils que possède ce


nœud.
• Degré d’un arbre : c’est égal au plus grand des degrés de ses
nœuds.

Jebli Khouloud Cours ASD2 2020/2021 9 Jebli Khouloud Cours ASD2 2020/2021 10

5
27/05/2021

Taille et profondeur d'un arbre Profondeur d'un arbre


• On appelle la taille d'un arbre, le nombre de Dans l'exemple
nœuds qui le composent. suivant:
• On appelle également la profondeur d'un • le nœud F est de
nœud la distance en terme de nœuds par profondeur 2
rapport à l'origine (racine). • et le nœud H est
de profondeur 3.
• Par convention, la racine est de profondeur 0.

Jebli Khouloud Cours ASD2 2020/2021 11 Jebli Khouloud Cours ASD2 2020/2021 12

6
27/05/2021

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. En d’autres termes, c’est le
nombre de nœuds de la branche la plus longue = dernier niveau +1.
Exemple la profondeur de l'arbre est 4
• Par défini*on la hauteur de la racine est égal
à 1.
• On peut aussi définir la hauteur de manière récursive : la hauteur d'un
arbre est le maximum des hauteurs de ses fils. C'est à parIr de ceJe
définiIon que nous pourrons exprimer un algorithme de calcul de la
hauteur de l'arbre. h(racine) = 1 (pour tout arbre non vide)
• Remarque: La hauteur d'un arbre est très importante. En effet, c'est un
repère de performance. La plupart des algorithmes que nous verrons dans
la suite ont une complexité qui dépend de la hauteur de l'arbre. Ainsi plus
l'arbre aura une hauteur élevée, plus l'algorithme meJra de temps à
s'exécuter.

Jebli Khouloud Cours ASD2


Jebli Khouloud Cours ASD2 2020/2021 13 14
2020/2021

7
27/05/2021

Hauteur d’un nœud = nombre de nœuds à partir de la racine pour aller


jusqu'au nœud

Jebli Khouloud Cours ASD2 2020/2021 15 Jebli Khouloud Cours ASD2 2020/2021 16

8
27/05/2021

Arbre Général et Arbre Binaire


Quelques types d’arbres Règle de passage
• Arbres généraux : il sont composés d’une
racine et d’un ensemble de nœuds, tels que,
de chaque nœud sort un nombre quelconque
de branches
• Arbres binaires
• Arbres binaires de recherche (ABR) ou arbres
binaires ordonnés (ABO)

Jebli Khouloud Cours ASD2 2020/2021 17 Jebli Khouloud Cours ASD2 2020/2021 18

9
27/05/2021

Arbres Binaires
• Il existe un cas particulièrement utilisé : c'est
l'arbre binaire. Dans un tel arbre, les nœuds
II – ARBRES BINAIRES ont au maximum 2 fils.
• On parlera alors de fils gauche et de fils droit
pour les nœuds constituant ce type d'arbre.
• On parlera aussi de sous arbre gauche et de
sous arbre droit.

Jebli Khouloud Cours ASD2 2020/2021 19 Jebli Khouloud Cours ASD2 2020/2021 20

10
27/05/2021

Arbres Binaires Arbres binaires : implémenta0on

Jebli Khouloud Cours ASD2 2020/2021 21 Jebli Khouloud Cours ASD2 2020/2021 22

11
27/05/2021

Représenta*on Liste des primitives


Nœud = Enregistrement • Procédure Initialiser (var A : Arbre)
Valeur : TypeElément – Initialise l’arbre A : transforme l’arbre binaire A en arbre vide
• Fonction Vide (A: Arbre): Booléen
FGauche : ^Nœud – retourne vrai si l’arbre binaire A est vide et faux sinon
FDroit : ^Nœud • Fonction Racine (A: Arbre): TypeElément
FinEnregistrement – retourne le contenu de la racine de l’arbre binaire A
Arbre = ^Nœud – (ne peut être appelée que si l’arbre A est non vide)
• Fonction SAGauche (A : Arbre) : Arbre
– retourne le sous-arbre gauche de l’arbre binaire A
• Définition récursive d’un arbre :
• Fonction SADroit (A : Arbre) : Arbre
Un arbre binaire est soit : – retourne le sous-arbre droit de l’arbre binaire A
– Un arbre vide
• Fonction Est_Feuille (A: Arbre): Booléen
– Une racine avec deux sous-arbres binaires (fils gauche et fils – retourne vrai si A est une feuille
droit).

Jebli Khouloud Cours ASD2 2020/2021 23 Jebli Khouloud Cours ASD2 2020/2021 24

12
27/05/2021

Parcours
Parcours en profondeur
d’arbres binaires
• Un parcours d'arbre est une façon d'ordonner les • Parcours en profondeur d’abord: dans ce cas
nœuds d'un arbre afin de les parcourir. on parcourt récursivement.
• On dis8ngue essen8ellement deux types de
parcours : • Mais il existe trois possibilités :
– le parcours en largeur – Préfixé: traiter la racine, parcourir le sous-arbre
– et les parcours en profondeur. gauche, puis le sous-arbre droit.
• Parmi les parcours en profondeur, on dis8ngue à – Infixé: parcourir le sous-arbre gauche, traiter la
nouveau racine, parcourir les sous-arbre droit.
– le parcours préfixé, – Pos1ixé (appelé aussi suffixé): parcourir le sous-
– le parcours infixé arbre gauche, le sous-arbre droit, puis traiter la
– et le parcours suffixé racine.
Jebli Khouloud Cours ASD2 2020/2021 25 Jebli Khouloud Cours ASD2 2020/2021 26

13
27/05/2021

Parcours en profondeur: préfixé Parcours en profondeur: infixé


• Si le traitement d’un sommet consiste à l’afficher, on • Si le traitement d’un sommet consiste à
affichera dans l’ordre 3, 1, 5, 4, 2, 0 l’afficher, on affichera dans l’ordre 5, 1, 3, 2, 4, 0

PROCEDURE Parcours_Préfixé (A : Arbre) PROCEDURE Parcours_Infixé (A : Arbre)


DEBUT DEBUT
Si (Non Vide(A)) Alors Si (Non Vide(A)) Alors
TRAITER (A) Parcours_ Infixé (A^.FGauche)
Parcours_Préfixé (A^.FGauche) TRAITER (A)
Parcours_Préfixé (A^.FDroit)
Parcours_ Infixé (A^.FDroit)
FinSI
FinSI
FIN
FIN
Jebli Khouloud Cours ASD2 2020/2021 27 Jebli Khouloud Cours ASD2 2020/2021 28

14
27/05/2021

Parcours en profondeur: pos/ixé Parcours en largeur


• Si le traitement d’un sommet consiste à l’afficher, on • Parcours en largeur
Parcourird’abord
en largeur à on parcourt
affichera dans l’ordre 5, 1, 2, 0, 4, 3 par distance croissante à la racine.
Parcours en largeur d’abord.
I on parcourt par distance croissante à la racine.

PROCEDURE Parcours_Pos1ixé (A : Arbre) 1 4

DEBUT
Si (Non Vide(A)) Alors
5 2 0

Si le traitement d’un sommet consiste à l’afficher, on affichera


Parcours_Pos/ixé (A^.FGauche) • Si le traitement d’un sommet consiste à l’afficher, on
dans l’ordre 3, 1, 4, 5, 2, 0.
C’est peut-être le parcours le plus naturel, mais c’est le plus
Parcours_ Pos/ixé (A^.FDroit) affichera dans délicatl’ordre
à programmer3,avec1, 4, 5,
les arbres 2, 0.
binaires.

TRAITER (A) • C’est peut-être le parcours le plus naturel, mais c’est le 4

FinSI plus délicat à programmer avec les arbres binaires.


FIN Jebli Khouloud Cours ASD2 2020/2021 29 Jebli Khouloud Cours ASD2 2020/2021 30

15
27/05/2021

PROCEDURE Parcours_Largeur (A : Arbre) Exercice : compléter les pointillés


Variable
F : File
PN : Arbre
DEBUT
Ini:aliser (F)
SI( NON Vide(A)) Alors
Enfiler (F,A)
TantQue (NON (Vide(F)) faire
PN ← Tête (F)
TRAITER(PN)
Défiler(F)
SI (PN^.FGauche <> NIL) ALORS
Enfiler (F, PN^.FGauche)
FINSI
SI (PN^.FDroit <> NIL) ALORS
Enfiler (F, PN^.FDroit) Parcours préfixé : ……………………………………………………………
FINSI Parcours infixé : ………………………………………………………………
FinTantQue
FINSI
Parcours pos+ixé :……………………………………………………………
FIN Parcours en largeur : ……………………………………………………………

Jebli Khouloud Cours ASD2 2020/2021 31 Jebli Khouloud Cours ASD2 2020/2021 32

16
27/05/2021

Recherche dans un arbre non FONCTION Recherche (E : TypeElément, A : Arbre) : Booléen


DEBUT
ordonné SI (Vide(A)) ALORS
Recherche ←FAUX
SINON
• FONCTION Recherche (E : TypeElément, SI (A^.Valeur = E) ALORS
A : Arbre) : Booléen Recherche ← VRAI
SINON
SI (Recherche(E, SAGauche(A)) ALORS
– retourne Vrai si l'élément E est présent dans A, Recherche ← VRAI
Faux sinon SINON
Recherche ← Recherche (E, SADroit(A))
FINSI
FINSI
FINSI
Jebli Khouloud Cours ASD2 2020/2021 33 FIN Jebli Khouloud Cours ASD2 2020/2021 34

17
27/05/2021

Arbre Binaire de Recherche (ABR)


• Arbre binaire de recherche (ABR) ou arbre
binaire ordonné, (ABO) est un arbre qui, s’il
n’est pas vide, est tel que :
III – ARBRES BINAIRES DE – Ses sous-arbres gauche et droit sont des ABR
RECHERCHE – Les valeurs des nœuds du sous-arbre gauche sont
strictement inférieures à la valeur du nœud racine
de l’arbre
– Les valeurs des nœuds du sous-arbre droit sont
strictement supérieures à la valeur du nœud
racine de l’arbre

Jebli Khouloud Cours ASD2 2020/2021 35 Jebli Khouloud Cours ASD2 2020/2021 36

18
27/05/2021

Exemple Arbre Binaire de Recherche (ABR)

Recherche dans un ABR

Remarque: Parfois, dans certains cas, les ABR admeGent les doublons et ainsi:
Les valeurs des nœuds du sous-arbre gauche sont inférieures ou égales à la
valeur du nœud racine de l’arbre.
Jebli Khouloud Cours ASD2 2020/2021 37 Jebli Khouloud Cours ASD2 2020/2021 38

19
27/05/2021

FONCTION Recherche (x : TypeElément, A : Arbre) : Booléen


DEBUT
SI (A = NIL) ALORS
Recherche ←FAUX
SINON
SI (A^.Valeur = x) ALORS
Recherche ← VRAI
SINON
SI (x < A^.Valeur) ALORS
Recherche ← Recherche (x,A^.FGauche)
SINON
Recherche ← Recherche (x,A^.FDroit)
FINSI
FINSI
FINSI
FIN

Jebli Khouloud Cours ASD2


39 Jebli Khouloud Cours ASD2 2020/2021 40
2020/2021

20
27/05/2021

Fonc%on CréerNoeud (x : En%er) : Arbre


VAR
A : Arbre
DEBUT
Insertion dans un ABR Allouer (A)
A^.Valeur ← x
Version récursive A^.FGauche ← NIL
A^.FDroit ← NIL
CréerNoeud ← A
FIN
Jebli Khouloud Cours ASD2 2020/2021 41 Jebli Khouloud Cours ASD2 2020/2021 42

21
27/05/2021

Procédure InsertionArbre (x : TypeElément, var A :


Arbre)
DEBUT
SI (Vide(A)) ALORS Suppresion dans un ABR
A ← CréerNoeud(x)
SINON L’opéra(on dépend du nombre de fils
SI (x < A^.Valeur) ALORS du nœud à supprimer.
InsertionArbre (x, A^.FGauche)
SINON
InsertionArbre (x, A^.FDroit)
FINSI
FINSI
FIN Jebli Khouloud Cours ASD2 2020/2021 43 Jebli Khouloud Cours ASD2 2020/2021 44

22
27/05/2021

Suppression d’un nœud (1) Suppression d’un nœud (2)

• Cas 2 : le nœud à supprimer a un fils et un seul. Le nœud est


• Cas 1 : le nœud à supprimer n’a pas de fils, c’est une décroché de l’arbre comme dans le cas 1. Il est remplacé par son fils
unique dans le nœud père, si ce père existe. Sinon l’arbre est réduit
feuille. Il suffit de décrocher le nœud de l’arbre, c’est-à- au fils unique du nœud supprimé.
dire de l’enlever en modifiant le lien
Jebli Khouloud Cours ASD2 Jebli Khouloud Cours ASD2
45 46
2020/2021 2020/2021

23
27/05/2021

Suppression d’un nœud (3)

Suppresion dans un ABR

Version itéra,ve
• Cas 3 : le nœud à supprimer p a deux fils. Soit q le nœud de son sous-
arbre gauche qui a la valeur la plus grande (on peut prendre
indifféremment le nœud de son sous-arbre droit de valeur la plus peBte).
Il suffit de recopier la valeur de q dans le nœud p et de décrocher le nœud
q. Puisque le nœud q a la valeur la plus grande dans le fils gauche, il n’a
donc pas de fils droit, et peut être décroché comme on l’a fait dans les cas
1 et 2.
Jebli Khouloud Cours ASD2
47 Jebli Khouloud Cours ASD2 2020/2021 48
2020/2021

24
27/05/2021

PROCEDURE SupprimerNoeud (var A: Arbre)


PROCEDURE SuppressionArbre (x : TypeElément, var A : Arbre)
VAR
Elt: Arbre DEBUT
DEBUT SI (Non Vide(A)) ALORS
Elt ← A SI (x = A^.valeur) ALORS
SI (A^.FDroit = NIL et A^.FGauche = NIL) ALORS SupprimerNoeud (A)
A←NIL
Libérer(Elt) SINON
SINON SI (x < A^.Valeur) ALORS
SI (A^.FDroit = NIL) ALORS SuppressionArbre (x, A^.FGauche)
A ← A^.FGauche SINON
Libérer (Elt)
SINON SuppressionArbre (x, A^.FDroit)
Elt ← A^.FDroit FINSI
TantQue (Elt ^.FGauche <> NIL) faire FINSI
Elt ← Elt ^.FGauche
FINSI
FinTantQue
A^.Valeur ← Elt ^.Valeur FIN
SupprimerNoeud (Elt)
FINSI
FINSI Jebli Khouloud Cours ASD2 2020/2021 49 Jebli Khouloud Cours ASD2 2020/2021 50
FIN

25
27/05/2021

Fonc%on PlusGrand ( A : arbre ) : arbre


Début
Si A^.filsD = nil alors
PlusGrandß A
Sinon
Suppresion dans un ABR PLusGrandß PlusGrand( A^.filsD )
//on descend à droite
Version récursive FinSi
Fin

Jebli Khouloud Cours ASD2


Jebli Khouloud Cours ASD2 2020/2021 51 52
2020/2021

26
27/05/2021

procedure Supprimer (elt:TypeElement, var A:arbre)


variable Quelques fonc,ons sur les arbres
x, NPG: Arbre Si A^.filsD = nil alors
Début xßA
Si Non Vide (A) Alors A ß A^.filsG • On définit deux fonctions sur les arbres binaires :
si elt < A^.Valeur alors Libérer(x)) • Soit A : Arbre
Supprimer (elt, A^.filsG) Sinon
Sinon NPG ß PlusGrand ( A^.filsG )
Si elt > A^.Valeur Alors xßNPG
• Taille :
Supprimer (elt, A^.filsD) A^.Valeurß NPG^.Valeur Si Vide(A) alors Taille (A) = 0
Sinon // elt = A^Valeur A^.filsG ßNPG^.filsG Sinon Taille (A)= 1 + Taille(SAGauche(a) ) + Taille(SADroit(A))
Si A^.filsG = nil Alors Libérer(x)
xßA Finsi
A ß A^.filsD Finsi • Hauteur :
Libérer(x) Finsi Si Vide(A) alors Hauteur (A) = 0
Sinon Finsi Sinon Hauteur (A) = 1 + max ( Hauteur(SAGauche(A)),
Fin Hauteur(SADroit(A)) )

Jebli Khouloud Cours ASD2


53 Jebli Khouloud Cours ASD2 2020/2021 54
2020/2021

27
27/05/2021

Autres types d’arbres


• Arbre dégénéré ou filiforme : un arbre est dit
dégénéré si tous les nœuds de cet arbre ont au plus un
descendant
• Arbre binaire localement complet : c’est un arbre tel
que chaque nœud possède 0 ou 2 feuilles.
• Arbre binaire complet : est un arbre localement
complet où toutes les feuilles sont sur le même niveau.
Sa taille est de 2k -1 (k étant le niveau des feuilles)
• Arbre binaire parfait : arbre binaire dont tous les
niveaux sont complets sauf peut être le dernier, mais
alors les feuilles du dernier niveau sont regroupées à
gauche.

Jebli Khouloud Cours ASD2 2020/2021 55 Jebli Khouloud Cours ASD2 2020/2021 56

28

Vous aimerez peut-être aussi