Vous êtes sur la page 1sur 14

Objectifs

Objectifs du cours

Présentation et définition des arbres


Algorithmes et Terminologie – Utilisation
Structures de Données Les arbres binaires
Chapitre 9 – Les arbres TAD, algorithmes de service
Implémentation

Capocchi Laurent
capocchi@univ-corse.fr
http://spe.univ-corse.fr/capocchiweb

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données

Structure récursive non-linéaire Structure récursive non-linéaire

Les arbres ? Les arbres ?

Arbre : ensemble de points : les nœuds, connectés par Collection hiérarchique d'objets
un ensemble de lignes : les arcs Structure homogène dont chaque élément (noeud)
Arbre : Très utilisé en informatique quand l’information contient de l'information et plusieurs liens (pointeurs)
possède une structure hiérarchique ou imbriquée vers des éléments du même type

arcs

nœuds
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Structure récursive non-linéaire Structure récursive non-linéaire

On peut définir récursivement un arbre

Racine Il existe un nœud distingué appelé « racine »


Les autres nœuds sont partitionnés en un nombre fini de
Nœud Nœud Nœud sous-ensembles disjoints constituant eux-mêmes des
arc arbres : sous-arbres
Un arbre est un ensemble de nœuds organisés de façon
Nœud Nœud Nœud hiérarchique à partir d'un nœud particulier appelé racine
Si en se déplaçant à partir d’un nœud père, vers son
père, etc. , et que l'on arrive à la racine de l’arbre:
l'arbre est dit connexe
sous-arbre Une liste est un cas particulier d’arbre :
arbre dégénéré

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données

Structure récursive non-linéaire Les arbres: Implémentations

Il s’agit de hiérarchies strictes : Représentation séquentielle : par tableaux

Il n’y a pas de boucles


Il n’y a pas de partage des descendants
C
a

b c
Représentation chaînée : par pointeurs
A B a e e 1
a g 1
a g 2 3 4
g
b c
b c
a e f 5 6 7 8
d

g 2 ... 9 10
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres Utilisation des arbres

Une des structures les plus importantes et des plus 1/ Représentation et manipulation d’expressions
spécifiques de l’informatique arithmétiques : Arbres Syntaxiques

Organisation des fichiers dans les SE


Représentation des programmes traités par un (a+b) / (c*(a+b) + (a*b))
ordinateur
Représentation d’une table des matières /
Représentation d’un dictionnaire Évaluation +
+
Représentation d’un arbre généalogique Simplification
a b * *
Dérivation

… c + a b

a b

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données

Utilisation des arbres Utilisation des arbres

2/ Représentation d'un dictionnaire: Arbres 3/ Modélisaion des situtions liées à la généalogie


lexicographiques

Ensemble de mots représentés avec un minimum de


lettres

{alors, faire, fin, sinon}


o r s
l
a
a i r e
f
i n
s i n o n

Temps de calcul est proportionnel à la longueur du mot et


est indépendant de la taille du dictionnaire

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Utilisation des arbres Utilisation des arbres

4/ Classements 5/ Grammaire

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données

Les arbres: Terminologie Les arbres: Terminologie

Arbre : Une structure d'arbre d'un type de base T est :


1 racine
soit la structure vide
nœud interne
soit un nœud de type T associé à un nombre fini de structures 3 4
d'arbre disjointes du type de base T appelées sous-arbres 2
Taille d’un arbre : nombre de ses nœuds
5 6 7 8
Un nœud est caractérisé par : branche
chemin feuille
Une étiquette : valeur associée au nœud 9 10
Ses fils ou descendants immédiats
Son degré : nombre de ses fils. Le degré d'un arbre est le
plus grand degré de ses nœuds 1 père de 2,3,4
2,3,4 enfants de 1
Nœuds particuliers
3,4 frères de 2
Racine : n’est le fils d’aucun nœud 1,3 ancêtres de 7
Feuille : ne possède pas de fils 9,10 descendants de 7

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres: Terminologie Les arbres: Terminologie

Donnez le degré et la taille de ces arbres A arbre et x nœud de A


niveauA(x) = distance(nombre d’arcs) de x à la racine

Degré = 2 niveauA(x) = 0 si x = racine(A)


Taille = 10 1 + niveau (parent (x) ) sinon

0 1

1 2 3 4

Degré = 3 2 5 6 7 8
Taille = 16 3 9 10

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données

Les arbres: Terminologie Les arbres: Sous-arbres

A arbre et x nœud de A A arbre et x nœud de A


hA(x) = distance de x à son plus lointain descendant qui ArbreA(x) = sous-arbre de A qui a racine x
est un nœud externe (feuille)
hA(x) = h(ArbreA(x) )
hA(x) = 0 si x nœud externe
A = ArbreA( racine(A) )
1 + max { hA(e) | e enfant de x } sinon
h(A) = hA(racine(A)) 1
1
2 3 4
hA (8) = 0 2 3 4
ArbreA (2) 5 6 7 8
hA (7) = 1
5 6 7 8 ArbreA (7)
hA (3) = 2 ArbreA (8)
9 10
h(A) = hA (1) = 3 9 10

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres: Longueur de cheminement Les arbres: N-aires

La longueur de chemin (ou de cheminement) d'un arbre Arbre N-aire : tout nœud possède N sous-arbres (vides ou
non), N fixé
Somme des longueurs de chemin de ses nœuds
La longueur de cheminement interne Une liste est donc un arbre unaire

Somme des longueurs de cheminement de ses nœuds Arbre N-aire complet : tout nœud interne possède N
non terminaux enfants
La longueur de cheminement externe
1
Somme des longueurs de cheminement de ses feuilles 1
Arbre dégénéré ou filiforme 2 3 4
2 3 4
Arbre dont chaque nœud a au plus un fils 5 6 7 8
5 11 6 12 7 13 14 8 15
9 10
9 16 10

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données

Les arbres: N-aires Les arbres: Binarisation


1
1
Arbre binaire: tout nœud possède deux sous-arbres 3 4
(vides ou non) 2
2 3 4
Arbre binaire complet : tout nœud interne possède 5 6 7 8
deux enfants 5 6 7 8
9 10
9 10
1
1 Implémentation des arbres planaires : on défini
2 un ordre sur l’ensemble des fils Lien premier enfant
2 3
3 Lien frère droit
4 5 12 13
4 5 1
Un seul type de pointeur
7 8 11
6 2 3
6
9 10
5 ...

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres: Binarisation Les arbres binaires

Tout arbre général est représentable sous la forme d’un Définition récursive
arbre binaire
Un arbre vide
La binarisation transforme le 1er fils d’un arbre général Un nœud racine uniquement
en fils gauche et tout n ième fils (n>1) en fils droit du n-1
ième
fils Un nœud racine qui possède une valeur et qui est lié à 0,
1 ou 2 sous-arbres éventuellement vides

Arbre binaire complet =


arbre binaire dont tout
nœud a 0 ou 2 fils
racine

Sous Sous
arbre g arbre d

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données

Les arbres binaires Les arbres binaires

Nombre total de nœud pour un arbre complet de hauteur h Cas particuliers

Chaque nœud a au maximum 2 fils


1 élément au niveau 0
2 éléments au niveau 1

2h éléments au niveau h (hauteur de l’arbre)

Un arbre binaire de hauteur h a donc : 1+2+22+..+2h = 2h+1-1


éléments

Un arbre binaire de hauteur h est dit complet si chaque


niveau 0, 1, ... h est rempli : il a donc exactement 2h+1 –1
éléments

Un arbre binaire de hauteur h est dit parfait si tous les


niveaux 0, ..., h-1 sont remplis mais dans le niveau h, tous
les éléments sont regroupés à gauche
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Les arbres binaires Les arbres binaires

Arbre localement complet


Type arbre volet spécification
Arbre A dont les nœuds non terminaux ont degré(A) fils Utilise booléen,nœud
Tous les nœuds qui ne sont pas feuilles ont deux fils Opérations de création
arbreVide : → Arbre
créerArbre : Nœud x Arbre x Arbre → Arbre
filsGauche : Arbre → Arbre //retourne le sous arbre gauche
filsDroit : Arbre → Arbre //retourne le sous arbre droit
Opération d’extraction
racine : Arbre → Nœud //retourne le nœud racine de l’arbre
contenu : Nœud → Élément //retourne le contenu du nœud
Opération de Test
estVide : Arbre → Booléen
Pré-conditions
racine(a) est défini ssi estVide(a) = FAUX
filsGauche(a) est défini ssi estVide(a) = FAUX
filsDroit (a) est défini ssi estVide(a) =FAUX

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données

Les arbres binaires Implémentation

Type arbre volet sémantique axiomes: lien entre les Trois types
fonctions, défini le comportement de chaque fonction de type des informations stockées aux nœuds : Élément
base (primitives)
type des nœuds : Nœud
type des arbres binaires : t_Arbre
Variable o : nœud ; a1,a2 : arbre;
Implémentation
racine (créerArbre(o,a1,a2)) : o
Les fils d’un nœud sont des arbres
filsGauche (créerArbre(o,a1,a2 )) : a1
Définition récursive des arbres et des méthodes sur
filsDroit (créerArbre(o,a1,a2)) : a2 les arbres
On pourrait identifier un arbre avec l’adresse de sa
racine (Type TarbreBinaire = Noeud)

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Implémentation Représentation d’un arbre

Le nœud racine unArbre


On peut définir une représentation des arbres en utilisant une
les pointeurs. Dans ce cas un arbre binaire peut être vide
(pointeur égal à NIL)
phrase
type de
NIL
Type t_Arbre = Nœud Nœud NIL

Type Nœud = Structure


cinq
mots
valeur : Élément Une feuille
NIL NIL NIL NIL
filsGauche : t_Arbre
filsDroit : t_Arbre
finStructure Nœud

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données

Arbre binaire Exercices

Opérations de création (i) Écrire le reste des opérations du TAD arbre :


Fonction arbreVide (): Arbre
Opérations de création
Retourner NIL
arbreVide : → t_Arbre
finFonction arbreVide
créerArbre : Nœud x t_Arbre x t_Arbre → t_Arbre
filsGauche : t_Arbre → t_Arbre //retourne le sous arbre gauche
Opérations de création (ii)
filsDroit : t_Arbre → t_Arbre //retourne le sous arbre droit
Fonction créerArbre ( n : Nœud, fg : t_Arbre,
fd : t_Arbre) : t_Arbre Opération d’extraction
variable nouveauArbre : t_Arbre racine : t_Arbre → Nœud //retourne le nœud racine de l’arbre
nouvauArbre <- @n contenu : Nœud → Élément //retourne le contenu du nœud
nouvauArbre filsGauche <- fg Opération de Test
nouvauArbre filsDroit <- fd estVide : t_Arbre → Booléen
retourner nouveauArbre
finFonction créerArbre

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Caractéristique des arbres Parcours d’arbre

Une des caractéristiques des listes est de permettre un Parcourir un arbre c’est examiner tous ses nœuds selon
traitement une fois et une seule des éléments une certaine règle pour effectuer un certain traitement

L'ordre des traitements est l'ordre dans lequel sont


Rechercher la présence d’une information particulière
rangés les éléments
Afficher le champ de chaque nœud
Parcours facile : structure linéaire ! …
Dans le cas des arbres on n'a plus cet ordre naturel :
Il existe plusieurs choix : structure non linéaire ! On peut parcourir un arbre
en profondeur d’abord: parcours branche après branche
On parle de parcours d’arbre
en largeur d’abord: parcours niveau après niveau

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données

Parcours d’arbre Parcours d’arbre

Représentation naturelle d’un arbre binaire Il existe trois règles de parcours


Récursivement et par chaînage
Parcours infixe
Parcours préfixe
Parcours postfixe
Ces différents parcours sont un bon outil pour convertir les
expressions arithmétiques infixes en préfixe ou postfixe
Exemple : a = (b+(c*d))

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Parcours Infixe Parcours Infixe

La règle de parcours est la suivante Procedure parcoursInfixe (entrée a:Arbre)


= si ( estVide(a)=FAUX ) alors
Parcourir le sous-arbre gauche + parcoursInfixe (filsGauche(a))
a
Traiter la racine exploiter(racine(a))
* parcoursInfixe (filsDroit(a))
Parcourir le sous-arbre droit b
FinProcedure parcoursInfixe
c d

a = (b + (c * d))
Notation infixée et ambiguë : gestion des parenthèse

2ème passage

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données

Parcours Préfixe Parcours Préfixe

La règle de parcours est la suivante Procedure parcoursPrefixe (a:Arbre)


si ( estVide(a)=FAUX ) alors
Traiter la racine exploiter(racine(a))
Parcourir le sous-arbre gauche parcoursPrefixe (filsGauche(a))
Parcourir le sous-arbre droit parcoursPrefixe (filsDroit(a))
finSi
=
Fin Procedure
+
a
=a+b*cd *
b

c d
1er passage Notation préfixée : notation polonaise

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Parcours Postfixe Parcours Postfixe

La règle de parcours est la suivante Procedure parcoursPostfixe (a: Arbre)


si ( estVide(a)=FAUX ) alors
Parcourir le sous-arbre gauche parcoursPostfixe (filsGauche(a))
Parcourir le sous-arbre droit parcoursPostfixe (filsDroit(a))
Traiter la racine exploiter(racine(a))
= FinProcedure parcoursPostfixe
+
a
abcd*+=
*
b
Notation postfixée : notation polonaise inversée
3ème passage c d

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données

Parcours en largeur Arbre Binaire de Recherche : ABR

On part de la racine et on énumère l'ensemble de ses Un ABR est une structure de donnée
descendants directs offrant une recherche en O(log n)
permettant de faire des ajouts et des suppressions en
Puis on réitère le processus sur les descendants eux-
O(log n)
mêmes
On effectue ainsi un parcours « de gauche à droite et de
haut en bas » Un ABR est un arbre binaire tel que pour tout nœud
1 les éléments de tous les nœuds du sous-arbre gauche
sont inférieurs à l'élément du nœud,
2 3 4 les éléments de tous les nœuds du sous-arbre droit sont
supérieurs à l'élément du nœud
5 6 7 8
Arbre non vide A = (r, A1, A2, …, Ak) Supposition : un ABR ne peut pas contenir deux éléments
nœuds de niveau 0, 1, 2, ... 9 10 ayant la même valeur
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Remarque: Pour une suite d'éléments, il existe plusieurs
arbres binaires de recherche
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Arbre Binaire de Recherche : ABR Arbre Binaire de Recherche : ABR

Recherche d'un élément AjouterRacine : Élément x Arbre → Arbre


Recherche : Élément x Arbre -> Booléen
Ajout d'un élément : 2 étapes
Recherche de la place de l'élément à insérer
Insertion de l'élément
Ajout aux feuilles
AjouterFeuille : Élément x Arbre -> Arbre

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données

Arbre Binaire de Recherche : ABR Arbre Binaire de Recherche : ABR

Suppression d'un élément Suppression d'un élément


Chercher l'élément Réorganiser l'arbre
Supprimer l'élément pour un nœud sans fils, suppression immédiate.

Réorganiser l'arbre pour un nœud avec un seul fils, il suffit de le remplacer


par ce fils
Spécification de la suppression
Max rend l'élément maximal d'un arbre
Dmax rend l'arbre privé de cet élément
Supprimer : Élément x Arbre -> Arbre
Max : Arbre -> Élément
Dmax : Arbre -> Arbre

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Arbre Binaire de Recherche : ABR Conclusion

Réorganiser l'arbre pour un nœud qui a deux fils Arbre binaire de recherche = bon compromis entre
tableaux et listes chaînées
remplacer le nœud contenant l'élément à supprimer par
celui qui lui est immédiatement soit inférieur, soit Tableaux
supérieur
Accès direct à partir de l’indice
Insertion et suppression sont des opérations coûteuses
Listes chaînées
Accès direct impossible
Insertion et suppression facile
Arbre binaire de recherche
Accès "relativement" rapide
Ajout et suppression "relativement" rapides.
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données

Bibliographie et Webographie

C. PAOLI, Cours d'algorithmes et structures de données,


Université de Corse, 2005

Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données