Académique Documents
Professionnel Documents
Culture Documents
INTRODUCTION
Un arbre binaire est une structure constituée par une racine et par deux sous-arbres vide ou non,
le sous-arbre gauche et le sous-arbre droit.
un arbre vide est un arbre particulier qui ne comporte ni racine, ni sous-arbres.
Un arbre binaire complet est un arbre binaire où tout nœud interne a deux enfants. Càd possède 0 ou 2 fils.
Un arbre binaire parfaite: pour le dernier niveau si un nœud possède un seul fils, alors celui-ci placé à
gauche.
Un arbre binaire plein: est un arbre binaire où chaque nœud possède exactement 2 fils, sinon le nœud est
obligatoirement une feuille.
Racine
SAG SAD
21/04/2019 EMNA KRAIEM BEN AFIA -------------- L2 INFOS 2
21/04/2019
IMPLÉMENTATION
1. Déclaration
La représentation de la structure de données arbre binaire est constituée de 2 parties:
une pour représenter :
o un nœud qui contient une valeur,
o un pointeur vers le nœud gauche appelé aussi fils gauche
o un pointeur vers le nœud droit ou le fils droit ;
une autre partie qui constitue la représentation de l’arbre sous forme d’un pointeur vers un nœud qui
est la racine.
Type
Nœud = structure
valeur : typeValeur
FilsGauche : ^Nœud
FilsDroit : ^Nœud
Fin Structure
ArbreBinaire :^Nœud
21/04/2019 EMNA KRAIEM BEN AFIA -------------- L2 INFOS 4
21/04/2019
IMPLÉMENTATION
2. Création d’un arbre binaire vide
La fonction CréerArbreVide crée et retourne un arbre vide, il suffit de déclarer un
pointeur sur un arbre binaire et l’initialiser à la valeur NIL.
IMPLÉMENTATION
3. Création d’une feuille
La fonction CréerFeuille permet de créer un nœud externe contenant une valeur, et
retourne sa position en mémoire.
IMPLÉMENTATION
4. Création d’un arbre
La fonction CréerArbre permet de créer un arbre à partir d’un sous-arbre droit et
d’un sous-arbre gauche existants, et d’un élément qui présente la valeur de la racine.
IMPLÉMENTATION
5. Test arbre binaire vide
Teste si un arbre binaire est vide ou non.
IMPLÉMENTATION
6. Accès à la racine
La fonction suivante récupère la valeur contenue dans le nœud racine d’un arbre.
IMPLÉMENTATION
7. Suppression d’un arbre
La fonction suivante permet de détruire la totalité de l’arbre ou du sous-arbre dont la
position en mémoire est fournie en paramètre: cette position est celle de la racine.
EXERCICE 0
1
1 5
7
Soit A l’arbre binaire, nous allons créer cet arbre en employant les primitives définies et implémentées ci-dessus:
Alghorithme CreerArbreBinaire
Var
A,B,C : ArbreBinaire
Début
A <- CréerArbre(1,CreerFeuille(0), CreerFeuille(1))
B <- CréerArbre(7,CreerFeuille(5), CreerFeuille(9))
C <- CréerArbre(2,A,B)
Fin
EXERCICE
L’arbre A est d’abord créé grâce à la primitive CréerArbre qui prend pour paramètre:
• la racine 1,
• un sous arbre gauche résultat de la création de la feuille 0,
• un sous-arbre droit qui est le résultat de la création de la feuille 1.
Ensuite un autre arbre B est crée qui a pour :
• racine 7
• sous-arbreles feuilles 5 et 9
Finalement un arbre C est crée à partir de:
• la racine 2
• des deux sous-arbres A et B.
EXERCICE
2éme Solutions:
Alghorithme CreerArbreBinaire
Var
A,B,C : ArbreBinaire
Début
A <- CréerArbre(1, CréerArbre(0,Nil,Nil), CréerArbre(1,NIL,NIL))
B <- CréerArbre(7, CréerArbre(5,Nil,Nil), CréerArbre(9,Nil,Nil))
A <- CréerArbre(2,A,B)
Fin
• Le résultat de CréerFeuille( e) est le même que celui de CréerArbre(e,Nil,Nil) puisqu’une feuille n’est rien d’autre
qu’un arbre possédant deux sous-arbres gauche et droit vides.
• Même si les deux algorithmes produisent le même résultat la première version est plus lisible et moins complexe,
puisqu’on ne spécifie qu’un seul paramètre pour la fonction CréerFeuille.
Le parcours sert à explorer un arbre, c’est-à-dire visiter un par un tous les nœuds.
Lors d’exploration un nœud peut être passé en revue une ou plusieurs fois.
Il ne faut cependant pas dépasser trois passages pour un même nœud.
LE PARCOURS EN PROFONDEUR
Pour parcourir des arbres en profondeur nous allons implémenter des modules
récursives.
Ces modules permettant de:
Visiter la racine
parcourir récursivement le sous-arbre gauche
parcourir récursivement le sous-arbre droit
(selon type de parcours appliquée)
LE PARCOURS EN PROFONDEUR
1. Parcours infixe
Soit l’arbre A=(r,A1,A2) où r est la racine, A1 est SAG et A2 SAD
Parcours infixe:
on parcourt de manière infixe le sous arbre gauche (SAG) Remarque:
on traite la racine Visiter est un module qui
on parcourt de manière infixe le sous arbre gauche (SAG) effectue le traitement
nécessaire sur l’élément racine
P.infixe(A)= P.infixe(A1), traiter(r ) , P.infixe(A2)
de l’arbre, il peut s’agir
Procédure infixe (A : ArbreBinaire) d’un affichage par
Début exemple
Si (NON ArbreVide(A)) alors
infixe(FilsGauche(A))
Visiter( Racine(A))
infixe (FilsDroit (A))
Finsi
21/04/2019 EMNA KRAIEM BEN AFIA -------------- L2 INFOS 20
Fin
21/04/2019
LE PARCOURS EN PROFONDEUR
2. Parcours préfixe
Soit l’arbre A=(r,A1,A2) où r est la racine, A1 est SAG et A2 SAD
Parcours préfixe:
on traite la racine
on parcourt de manière prefixe le sous arbre gauche (SAG) Procédure prefixe (A : ArbreBinaire)
on parcourt de manière prefixe le sous arbre gauche (SAG) Début
Si (NON ArbreVide(A)) alors
P.prefixe(A)= traiter(r ) , P. prefixe(A1), P. prefixe(A2)
Visiter( Racine(A))
prefixe(FilsGauche(A))
prefixe (FilsDroit (A))
Finsi
Fin
LE PARCOURS EN PROFONDEUR
3. Parcours prostfixe
Soit l’arbre A=(r,A1,A2) où r est la racine, A1 est SAG et A2 SAD
Parcours postfixe:
on parcourt de manière postfixe le sous arbre gauche (SAG)
on parcourt de manière postfixe le sous arbre gauche (SAG) Procédure prefixe (A : ArbreBinaire)
on traite la racine Début
Si (NON ArbreVide(A)) alors
P. postfixe(A)= P. postfixe(A1), P. postfixe(A2), traiter(r )
postfixe(FilsGauche(A))
postfixe (FilsDroit (A))
visiter( Racine(A))
Finsi
Fin
LE PARCOURS EN LARGEUR
Le parcours dans ce cas ne peut pas être récursif.
Désormais l’arbre n’est plus:
o soit vide
o soit un nœud racine muni d’un sous-arbre gauche et sous-arbre droit
Mais:
o un nœud racine situé au premier niveau
o une succession de nœuds par niveau
Il faut parcourir ces nœuds en ordre, du haut vers bas et de la gauche vers la droit.
Il faut utiliser une autre structure de données, que nous appellerons F.
Il faut sauvegarder les nœuds visités, en faisant en sorte que les nœuds d’un même niveau soient
successifs dans la structure F c-à-d que le frère (ou cousin) d’un nœud doit précéder ses enfants dans F.
LE PARCOURS EN LARGEUR 5
2
6
3
Exemple: 9 8