CHAPITRE 2

auteur: Philippe Moreau (U.P.J.V.)
 
Si vous avez déjà lu le chapitre vous pouvez accéder à la série d'EXERCICES concernant les structures de données linéaires.
Ces exercices sont également accessibles à la fin du chapitre.


LES ARBRES BINAIRES - PARCOURS et RECHERCHE


Définition:
On appelle arbre binaire de type T une structure formée:
- d'un élément appelé racine
- et d'un ensemble d'au plus 2 arbres de types T, aussi appelés sous-arbres.
 
Exemples:
 

 
VOCABULAIRE
On constate que la représentation d'un arbre peut prendre une forme particulière (sorte d'arbre dessiné à l'envers). Ainsi les sommets prendront également des noms particuliers.
par analogie à l'arbre (au sens naturel du terme) on parlera de:
noeuds, racine, feuilles, branches
 
et par analogie à l'arbre généalogique on parlera de:
pères, fils, frères
 
ainsi, sur le deuxième arbre pris en exemple:
5 est la racine
4, 6, 3 sont des feuilles
1 , 2, 3, 4, 5, 6 sont des noeuds
2, 3, 6 appartiennent à la même branche
de même on dira que:
2 est le père de 6
1 est le fils de 5
1et 2 sont frères

 

 
Remarque: Dans un arbre binaire, le fils unique d'un noeud ne sera jamais placé à l'aplomb de son père, mais toujours dirigé soit vers la gauche soit vers la droite. On parlera alors de fils droit et de fils gauche ou encore de sous arbre droit et de sous arbre gauche. (exemple: 4 et 1 sont dans le même sous arbre gauche issu de 5)
 
 
IMPLANTATION EN MEMOIRE
 
Informations nécessaires: pour un noeud quelconque de l'arbre binaire, les seules informations nécessaires sont:
- l'information sur son nom
- les informations concernant ses fils.
 
On peut alors décider que pour chaque noeud on construit un article du type:

L'arbre binaire suivant:

sera alors représenté par:

de plus il faut avoir une indication sur la racine (ici RACINE = A).
 
 
On constate que, dans ce type de représentation, il est difficile d'accéder au petit fils d'un noeud (parcours du tableau NOEUD pour trouver où se trouve le fils). Pour résoudre se problème on décidera plutôt de construire un article du type:

 

Ainsi l'arbre ci-dessus pourra se représenter par le chaînage suivant:

ce qui pourra s'implanter en mémoire sous la forme:

avec ADRRAC = 2
 
 
 
PARCOURS D'UN ARBRE BINAIRE
 
Lorsque l'on désire connaître les informations contenues dans un arbre (valeurs ou contenus de ses noeuds), cela nécessite de parcourir (ou visiter) celui-ci. Pour cela il existe différentes méthodes pour effectuer la visite d'un arbre binaire. Principalement, nous en retiendrons trois qui sont: les méthodes de visites dites preorder, inorder et postorder.
 
 
Principe de ces visites:
 
Visite preorder:
- on visite la racine (prise en compte de l'information)
- on visite le sous arbre gauche (SAG)
- on visite le sous arbre droit (SAD)
 
Visite inorder:
- on visite le sous arbre gauche (SAG)
- on visite la racine (prise en compte de l'information)
- on visite le sous arbre droit (SAD)
 
Visite postorder:
- on visite le sous arbre gauche (SAG)
- on visite le sous arbre droit (SAD)
- on visite la racine (prise en compte de l'information)
 
Il est clair que ces trois principes de visites font appel à la récursivité. Ainsi, on appliquera ces mêmes principes pour les visites des sous arbres gauches et droits mentionnés.
 
 
Exemple 1:
Observons sur l'arbre binaire suivant le résultat des différentes visites.

 
Ainsi, pour la visite preorder, l'ordre dans lequel les sommets seront pris en considération est:
A B D E G H C F I

 

 
Pour la visite inorder, l'ordre dans lequel les sommets seront pris en considération est:
D B G E H A F I C

 

 
Enfin, pour la visite postorder, l'ordre dans lequel les sommets seront pris en considération est:
D G H E B I F C A

 

 
 
 
Remarque:
 
Le sens de parcours de l'arbre binaire est le même dans les trois cas. Seul change, dans la visite, l'instant de prise en considération de l'information au moment du parcours. Ainsi, on peut tracer le chemin parcouru dans l'arbre:

 
 
Pour connaître la liste des informations rencontrées il suffit de savoir à quel moment le noeud est visité.
En marquant d'un · l'endroit où se situe la visite d'un noeud il suffit alors de remplacer:
Pour PREORDER   par   
Pour INORDER  ou par ou 
Pour POSTORDER   par   
 
Exemple 2:
 
Dans l'arbre suivant, les informations (contenu des nuds) sont des opérations, fonctions, nombres ou identificateurs.
Observons alors les résultats obtenus après utilisation des différentes méthodes de parcours sur un tel arbre binaire.

 
Ainsi, après un parcours preorder, on obtient:
* + / 8 2 4 - * 3 4 + 5 4
 
Après un parcours inorder, on obtient:
8 / 2 + 4 * 3 * 4 - 5 + 4
 
Enfin, après un parcours postorder, on obtient:
8 2 / 4 + 3 4 * 5 4 + ÷ - *
 
Ajoutons les règles suivantes pour les lectures preorder et inorder:
- Lorsque l'on descend dans un sous arbre on ouvre une parenthèse
- Lorsque l'on remonte d'un sous arbre on ferme une parenthèse
On obtient alors:
Pour preorder
* (+ (/ (8) (2)) (4)) (- (* (3) (4)) ( (+ (5) (4)) ) )
 
Pour inorder
( ((8) / (2)) + (4) ) * ( ((3) * (4)) - ( ((5) + (4))) )

 

 
 
On s'aperçoit alors que si l'on interprète le résultat obtenu lors de la visite inorder, comme étant l'écriture d'une expression algébrique (écriture dite infixée); le résultat obtenu après une lecture preorder correspond à l'écriture préfixée (sous forme de liste) de la même expression et le résultat de la lecture postorder correspond à l'écriture postfixée de l'expression (cf exemple de manipulation sur les piles CHAP II).
Rappelons à titre d'exemple que le langage FORTH utilise l'écriture postfixée sous cette forme et que le langage LISP utilise l'écriture préfixée.



 

 

ARBRE BINAIRE DE RECHERCHE


 
Un arbre binaire de recherche est un arbre binaire possédant récursivement la propriété suivante:
 
Les noeuds du sous arbre gauche sont tous inférieurs à la racine, elle-même inférieure aux noeuds du sous arbre droit (les éléments égaux pouvant être arbitrairement placés à gauche ou à droite (choix à faire)).
 
Ce qui se visualise de la façon suivante:

 
Exemple:

 
Remarque:
Ainsi que son nom l'indique, cet arbre est particulièrement utile pour résoudre les problèmes de recherche d'un noeud dans un arbre. En effet, si X est l'élément cherché, il suffit de comparer celui-ci avec la racine pour éliminer tous les candidats se trouvant dans le sous arbre gauche ou dans le sous arbre droit (en fonction du résultat du test avec la racine).
 
 
Création d'un arbre binaire de recherche:
 
Soit une suite S[1] , S[2] , , S[N] d'éléments. On désire, à partir de ces éléments, créer un arbre binaire de recherche.
 
Principe:
On réalise alors des insertions successives de chacun des éléments dans un arbre binaire de la manière suivante:
- S[1] (premier élément considéré) est la racine de l'arbre
- si S[i] est inférieur à la racine alors on insère S[i] dans le sous arbre gauche.
- si S[i] est supérieur ou égal à la racine alors on insère S[i] dans le sous arbre droit.
 
 
Exemple:
 
Soit:
10 , 21 , 5 , 12 , 18 , 9 , 3 , 7 la suite d'éléments considérés, alors on créera, par l'insertion successive des éléments, l'arbre binaire de recherche suivant:

insertion de 10

 

insertion de 21

 

insertion de 5

 

insertion de 12

 

insertion de 18

 

insertion de 9

 

insertion de 3

 

insertion de 7

 

 
 
EXERCICES sur les Arbres Binaires

 

Auteur: Philippe Moreau (U.P.J.V.)