H. Kassel 1 SDD (2007/2008)
Chap. 3 Les arbres binaires
Un arbre est un ensemble de nœuds, organisés de façon hiérarchique, à partir d'un nœud
distingué, appelé racine. La structure d'arbre est l'une des plus importantes et des plus
spécifiques de l'informatique: par exemple, c'est sous forme d'arbre que sont organisés les
fichiers dans des systèmes d'exploitation tels que UNIX ; c'est aussi sous forme d'arbres que
sont représentés les programmes traités par un compilateur…
Une propriété intrinsèque de la structure d'arbre est la récursivité, et les définitions des
caractéristiques des arbres, aussi bien que les algorithmes qui manipulent des arbres s'écrivent
très naturellement de manière récursive.
1. Arbres binaires
Examinons tout d'abord quelques exemples simples représentés par des arbres binaires :
les résultats d'un tournoi de tennis : au premier tour Jean a battu Jules, Marc a battu
François, Paul a battu Yves, et Luc a battu Pierre ; au deuxième tour Jean a battu Marc, et
Paul a battu Luc ; et Jean a gagné en finale contre Paul.
pedigree d'un cheval Zoe ; son père est Tonnerre et sa mère Belle ; mère de Belle est
Rose et père de Belle est Eclair…
jean
jean paul
jean marc paul luc
jean jules françois marc paul yves luc pierre
Zoe
Tonnerre Belle
Eclair Rose
une expression arithmétique dans laquelle tous les opérateurs sont binaires…
4 + 5 * 8
H. Kassel 2 SDD (2007/2008)
+
4 *
5 8
La structure d'arbre binaire est utilisée dans très nombreuses applications informatiques ; de
plus les arbres binaires permettent de représenter les arbres plus généraux.
1.1 Définition d'un arbre binaire
Le vocabulaire concernant les arbres informatiques est souvent emprunté à la botanique ou à
la généalogie ; étant donné un arbre B = <o, B1, B2 > :
'o' est la racine de B.
B1 est le sous-arbre gauche de la racine de B, (ou, plus simplement, le sous-arbre gauche
de B), et B2 est son sous-arbre droit.
On dit que C est un sous-arbre de B si, et seulement si : C = B, ou C = B1, ou C = B2, ou
C est un sous-arbre de B1 ou de B2.
On appelle fils gauche (respectivement fils droit) d'un nœud la racine de son sous-arbre
gauche (respectivement sous-arbre droit), et l'on dit qu'il y a un lien gauche
(respectivement droit) entre la racine et son fils gauche (respectivement fils droit).
Si un nœud ni a pour fils gauche (respectivement droit) un nœud nj, on dit que ni est le
père de nj (chaque nœud n'a qu'un seul père).
Deux nœuds qui ont le même père sont dits frères.
Le nœud ni est un ascendant ou un ancêtre du nœud nj si, et seulement si, ni est le père de
nj, ou un ascendant du père de nj ; ni est un descendant de nj si, et seulement si ni est fils
de nj, ou ni est un descendant d'un fils de nj.
Tous les nœuds d'un arbre binaire ont au plus deux fils :
- un nœud qui a deux fils est appelé nœud interne ou point double
- un nœud sans fils est appelé nœud externe ou feuille.
Donc, un arbre binaire est :
- soit vide
- soit constitué d'un élément de type T et d'au plus 2 arbres binaires
1.2 Représentation d'un arbre.
La représentation la plus naturelle reproduit la définition récursive des arbres binaires. Elle
peut être réalisée en allouant la mémoire soit de façon chaînée soit de façon contiguë.
Représentation classique d'un arbre est dynamique.
A chaque nœud on associe deux pointeurs, l'un vers le sous-arbre gauche, l'autre vers le sous-
arbre droit, et l'arbre est déterminé par l'adresse de sa racine. Lorsque l'arbre est étiqueté, on
représente dans un champ supplémentaire l'information contenue dans le nœud.
H. Kassel 3 SDD (2007/2008)
typedef struct arbre
{
T info;
struct arbre * sag, *sad
} arbre
typedef arbre *ptr_arbre
Si a est un pointeur sur la racine de l'arbre, alors a=NULL correspond à un arbre vide ; asag
pointe sur le fils gauche de a ; asad pointe sur le fils droit de a ; ainfo permet d'accéder au
contenu du nœud.
On ne parle d'arbres binaires que par l'intermédiaire des algorithmes qui utilisent le type arbre.
1.3 Algorithmes de parcours d'un arbre binaire
Parcours en profondeur d'abord : examiner complètement un chemin et passer au chemin
suivant tant qu'il en reste
a
j h
l i p
Parcours en largeur d'abord : examiner tout un niveau (profondeur hiérarchique) passant au
niveau du dessous tant qu'il en reste.
a
j h
l i p
Problème : pas de lien entre fils. Cela doit être traité itérativement.
H. Kassel 4 SDD (2007/2008)
Parcours en profondeur d'abord
a) Préordre
Si arbre non vide alors :
traiter la racine
parcourir en préordre le sag
parcourir en préordre le sad
Algorithme
Donnée : ptr_arbre p
void preordre(ptr_arbre a)
{
SI a NULL alors
{
afficher (ainfo)
préordre (asag)
préordre(a sad)
}
}
Ex. a
c b
m t y
u o
On affiche : a c m u t b y o
Rq : Il n'y a pas de priorité sur le parcours des sous-arbres. On pourrait commencer par traiter
sad avant sag.
H. Kassel 5 SDD (2007/2008)
b) Ordre
Principe
SI arbre est non vide alors :
parcourir le sag
traiter la racine
parcourir le sad
Algorithme
Donnée : ptr_arbre a
void ordre(ptr_arbre a)
{
SI a NULL ALORS
{
ordre(asag)
afficher(ainfo)
ordre(asad)
}
}
Rmq : Cet algorithme nous permet d'obtenir les informations dans un ordre total. On peut
rentrer les informations dans un arbre binaire de façon triée.
Ex.
a
c b
m t y
u o
On affiche u m c t a y o b
Postordre
SI arbre n'est pas vide :
parcourir en post-ordre le sag
parcourir en post-ordre le sad
traiter la racine
1 / 13 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !