Vous êtes sur la page 1sur 5

Les arbres (Partie 3)

1 Retour sur les arbres m-aires


Rappelons que les arbres m-aires sont des arbres dont chaque nœud peut
avoir jusqu’à m fils. Dans cette partie du cours, nous verrons comment traverser
ces arbres, comment les convertir en arbres binaires, et nous terminerons par
quelques implémentations de ces arbres.
Ceci est la troisième et der-
nière partie du cours trai-
1.1 Parcours des arbres m-aires tant des arbres. Une série
de TD/TP vous sera soumise
Comme pour les arbres binaires, nous avons plusieurs façons de traverser un dans les prochains jours.
arbre m-aire. En effet, nous pouvons le traverser en :

pre-ordre : Nous commençons par un nœud avant de passer à ses fils.


in-ordre : Nous commençons par le fils le plus à gauche, ensuite le nœud
lui-même, et nous finissons par tous les autres fils.
pos-ordre : Nous traversons tous les fils avant de passer au nœud lui-même.

1.2 Exemple

b g

c d e f h k

i j

F IGURE 1 – Exemple d’arbre m-aire.

Le parcours de l’arbre ci-dessous, en :


— pre-ordre donne : a, b, d, c, d, e, f, g, h, i, j, k
— in-ordre donne : c, b, d, e, f, a, i, h, j, g, k
— post-ordre donne : c, d, e, f, b, i, j, h, k, g, a

1
1.3 Conversion d’un arbre m-aire en un arbre binaire
Pour transformer un arbre m-aire en un autre qui est binaire, il suffit de
suivre ces étapes :

1.4 Étape 1
Détacher tous les fils qui ne sont pas les plus à gauche et les disposer sous
forme de LLC attachée au fils le plus à gauche.
Pour illustrer ceci, reprenons l’exemple précédent :

b g

c d e f h k

i j

F IGURE 2 – Première étape de transformation m-aire → binaire

Après avoir effectué cette opération, nous remarquons déjà notre arbre
binaire en place. En fait, cette étape transforme la relation père-fils, en une
autre : fils-frères en quelque sorte.

1.5 Étape 2
Pour bien apprécier et comprendre la transformation, il suffit d’effectuer une
rotation de 45◦ des LLCs dans le sens des aiguilles d’une montre. Ce qui nous
donne le résultat suivant :

2
a

c g

d h k

e i

f j

F IGURE 3 – Deuxième étape de transformation m-aire → binaire

Remarque

Remarquez que la racine de l’arbre qui est résulte n’a pas de fils droit.

2 Transformation d’une forêt en un arbre binaire


Rappelons d’abord qu’une fo-
La remarque précédente nous inspire justement une idée. Comme le fils droit rêt est un ensemble d’arbres
de tout arbre issu de la transformation m-aire→binaire est vide, pourquoi ne avec des racines distinctes.
pas faire pointer ce fils droit au prochain arbre de la forêt ? (une forêt pouvant ne conte-
nir qu’un ou pas du tout
Ce prochain arbre de la forêt étant lui-même issu d’une transformation
d’arbres)
m-aire→binaire aura lui aussi une racine dont le fils droit est vide, et que l’on
pourra faire pointer vers le prochain arbre et ainsi de suite. . .

3 Transformation d’un arbre binaire en une forêt


Nous pouvons transformer un arbre binaire en une forêt d’arbres m-aires, en
faisant en sorte que chaque nœud n’ait comme fils que son propre fils gauche
et l’ensemble des descendants droits de ce fils gauche.

3.1 Exemple
Soit l’arbre binaire sur la figure suivante :

3
a

b z

c g

d h k

F IGURE 4 – Deuxième étape de transformation m-aire → binaire

— Le nœud a aura comme fils les nœuds : b, g, et k.


— Le nœud b aura comme fils les nœuds : c, et d.
— Le nœud g aura comme seul fils le nœuds : h.
— Le nœud z sera un arbre à lui seul.

a z

b g k

c d h

F IGURE 5 – Deuxième étape de transformation m-aire → binaire

4 Implémentations des arbres


Comme toutes les structures de données que nous avons vues dans ce cours,
les arbres peuvent être implémentés avec des structures dynamiques (en utili-
sant les pointeurs), ou avec des structures contigües (en utilisant les tableaux).

4.1 Représentation des arbres binaires


Pour ce qui est des arbres binaires, l’implémentation est on ne peut plus évi-
dente. En effet, il suffit d’imaginer des structures (enregistrements) contenant
l’information du nœud et deux pointeurs (dans le cas d’une représentation
dynamique) l’un vers le fils gauche l’autre vers le fils droit. L’arbre serait alors
un pointeur vers la racine.
Quant à la représentation statique (contigüe, ou par tableau), il suffira de
remplacer les pointeurs par les indices des fils gauche et droit. Quant à l’arbre
lui-même, nous avons le choix :

1. Soit se dire que la racine de l’arbre est obligatoirement à la case 0. Et par


conséquent, l’arbre n’est qu’un tableau d’enregistrements.

4
2. Soit se dire que l’arbre est en fait une structure contenant : un tableau
qui contient les nœuds, et un entier contenant l’indice de sa racine.

4.2 Représentation des arbres m-aires


De même, les arbres m-aires peuvent être représentés en dynamique, en
concevant des nœuds qui contiennent :
— L’information propre au nœud.
— Une LCC des enfants de ce nœud.
Ou si m est connu, nous pouvons remplacer la LLC des fils par un tableau de
pointeurs vers ses fils.
Quant à la représentation statique, nous pouvons comme avec les arbres
binaires, se dire que l’arbre est en fait un tableau de nœuds. Chaque nœud de
cet arbre contient l’information qui lui est propre, et :
— soit un tableau de ses propre fils.
— soit deux indices : un vers son fils le plus à gauche, et le deuxième vers
son fils suivant (et ainsi de suite)

5 Exercices
Exercice 5.1 – À titre d’exercice, essayez de proposer des implémentations
des arbres binaires et m-aires avec les deux représentations : contigüe et
dynamique. N’hésitez pas à les discuter sur le forum.

6 Bibliographie
— Le cours du Pr. Zegour sur son site.