You are on page 1of 5

Gnralits

En informatique, un arbre est une structure de donnes rcursive gnrale, reprsentant un


arbre au sens mathmatique. C'est un cas particulier de graphe qui n'a qu'une seule source et
aucun cycle.
Dans un arbre, on distingue deux catgories d'lments :
* les feuilles, lments ne possdant pas de fils dans l'arbre ;
* les nuds internes, lments possdant des fils (sous-branches).
La racine de l'arbre est le nud ne possdant pas de parent.
La hauteur d'un arbre est la longueur du plus grand chemin de la racine une feuille.
Chaque nud possde une tiquette, qui est en quelque sorte le contenu de l'arbre.
L'tiquette peut tre trs simple: un nombre entier, par exemple. Elle peut galement tre aussi
complexe que l'on veut : un objet, une instance d'une structure de donnes, un pointeur, etc. Il
est presque toujours obligatoire de pouvoir comparer les tiquettes selon une relation d'ordre
total, afin d'implanter les algorithmes sur les arbres.
Par exemple, les rpertoires sous la plupart des systmes d'exploitation actuels (Microsoft
Windows, Unix dont Linux et Mac OS X ...) forment un arbre.
Les arbres sont en fait rarement utiliss en tant que tels, mais de nombreux types d'arbres avec
une structure plus restrictive existent et sont couramment utiliss en algorithmique,
notamment pour grer des bases de donnes, ou pour l'indexation de fichiers. Ils permettent
alors des recherches rapides et efficaces. Nous vous en donnons ici les principaux exemples :
* Les arbres binaires dont chaque nud a au plus deux fils : ils sont en fait utiliss sous
forme d'arbres binaires de recherche, de tas, d'AVL, ou encore d'arbres rouge-noir. Les deux
derniers exemples sont des cas particuliers d'arbres balancs, c'est--dire d'arbres dont les
sous-branches ont environ la mme hauteur.
* Les arbres n-aires qui sont une gnralisation des arbres binaires : chaque nud a au plus
n fils. Les arbres 2-3-4 et les arbres B en sont des exemples d'utilisation et sont eux aussi des
arbres balancs.

Arbres
Un arbre est un ensemble de nuds (appels aussi parfois sommets) relis par des artes tel
que chaque nud ( part la racine qui en a 0) ait exactement une arte pointant vers lui. La
racine est donc un nud particulier puisqu'il n'a pas de prdcesseur. Les feuilles sont les
nuds sans successeurs.

Arbres binaires
Un arbre binaire est un arbre tel que chaque nud a au plus deux fils (ou successeurs). Il peut
donc se reprsenter l'aide de la structure suivante:

Encore une fois, cette organisation est purement virtuelle. L'arbre suivant :

est peut-tre stock ainsi en mmoire...

Reprsentations dun arbre binaire:


Les arbres binaires peuvent tre construits partir de primitives d'un langage de
programmation de diffrentes manires. Dans un langage avec structures et pointeurs (ou
rfrences), les arbres binaires peuvent tre conus en ayant une structure trois nuds qui
contiennent quelques donnes et pointeurs vers son fils droit et son fils gauche. L'ordre que
cela impose aux nuds enfants est parfois utile, en particulier pour les parcours infixes.
Parfois, il contient galement un pointeur vers son unique parent. Si un nud possde moins
de deux fils, l'un des deux pointeurs peut tre affect de la valeur spciale nulle ; il peut
galement pointer vers un nud sentinelle.
Dans le cas du langage C :
struct cellule
{
int val ;
struct cellule *gch ;
struct cellule *drt;
};

Oprations lmentaires sur les arbres binaires :


Parcours prfixe, infixe et postfixe
(Parfois appels pr-ordre, in-ordre et post-ordre)
Soit une structure Arbre dont la racine est A et une rfrence gauche et droite ses deux fils.
Nous pouvons crire les fonctions suivantes :
Parcours prfixe
VisiterPrfixe(Arbre A) {
Visiter(A)
Si Non_Vide(gauche(A))
VisiterPrfixe(gauche(A))
Si Non_Vide(droite(A))
VisiterPrfixe(droite(A))
}
Ceci affiche les valeurs de l'arbre en ordre prfixe. Dans cet ordre, chaque nud est visit
ainsi que chacun de ses fils.
Parcours postfixe
VisiterPostfixe(Arbre A) {
Si Non_Vide(gauche(A))
VisiterPostfixe(gauche(A))
Si Non_Vide(droite(A))
VisiterPostfixe(droite(A))
Visiter(A)
}
Dans un parcours postfixe, on affiche chaque nud aprs avoir affich chacun de ses fils.
Parcours infixe
VisiterInfixe(Arbre A) {
Si Non_Vide(gauche(A))
VisiterInfixe(gauche(A))
Visiter(A)
Si Non_Vide(droite(A))
VisiterInfixe(droite(A))
}
Un parcours infixe, comme ci-dessus, visite chaque nud entre les nuds de son sous-arbre
de gauche et les nuds de son sous-arbre de droite. C'est une manire assez commune de
parcourir un arbre binaire de recherche, car il donne les valeurs dans l'ordre croissant.
Pour comprendre pourquoi cela est le cas, notons que si n est un nud dans un arbre binaire
de recherche, alors tous les lments dans le sous-arbre de gauche du nud n seront infrieurs

n et ceux dans le sous-arbre de droite seront suprieurs ou gaux n. Ainsi, si nous visitons
le sous-arbre de gauche dans l'ordre, de manire rcursive, puis que nous visitons n, et que
nous visitons le sous-arbre de droite, nous aurons visit l'ensemble du sous-arbre enracin en
n dans l'ordre.

Un exemple simple d'arbre binaire Dans cet arbre binaire,

* Rendu du parcours prfixe : 1, 2, 4, 5, 7, 8, 3, 6, 9


* Rendu du parcours postfixe : 4, 7, 8, 5, 2, 9, 6, 3, 1
* Rendu du parcours infixe : 4, 2, 7, 5, 8, 1, 3, 9, 6

You might also like