Terminale - Arbres

Les arbres : une nouvelle structure de données

Jusqu'à présent, nous avons appris à manipuler des structures de données linéaires : listes, dictionnaires, piles, files. Bien que très utiles, ces structures de données ne sont pas adaptées à tous les problèmes, comme la classification ou la recherche des données, pour lesquels il est préférable d'utiliser une structure hiérarchique.

Un peu de vocabulaire

Un arbre est une structure de données hiérarchique constituée de noeuds. Comme les listes, les arbres permettent de représenter un nombre variable de données, mais sont beaucoup plus adaptés à la recherche des données.

Les noeuds sont reliés entre eux par des arêtes. Un noeud peut avoir des enfants, qui sont eux mêmes des autres noeuds. Chaque noeud possède un parent unique, sauf le noeud le plus haut, appelé racine de l'arbre. Les noeuds sans enfants sont les feuilles de l'arbre. Une branche est une suite finie de noeuds consécutifs, de la racine vers une feuille.

Traditionnellement, on représente un arbre "à l'envers", avec la racine tout en haut et les feuilles tout en bas.

L'arbre ci-dessus possède les caractéristiques suivantes :

Chaque noeud possède une hauteur ou profondeur, définie comme le nombre d'arêtes entre ce noeud et la racine. Par exemple, la hauteur du noeud B est égale à 1, tandis que la hauteur du noeud H est égale à 3.

On définit alors la hauteur de l'arbre comme la plus grande des hauteurs des noeuds. Dans l'exemple ci-dessus, on a donc un arbre de hauteur 3.

Enfin, on définit l'arité d'un arbre comme le nombre maximal d'enfants qu'un noeud peut avoir. Dans l'exemple, c'est le noeud B qui possèdent le plus d'enfants : 3. L'arité de l'arbre est alors égale à 3.

Exemples courants

Parmi les exemples rencontrés dans la vie courante, on peut notamment citer les arborescences de fichiers :

ou encore l'arbre de la vie :

Les arbres généalogiques sont-ils des arbres au sens donné précédemment ?
Non ! Car un noeud possède deux parents.
Donner la taille, la hauteur et l'arité de l'arbre ci-dessous :

  • L'arbre possède 11 noeuds, il est donc de taille 11.
  • La hauteur de l'arbre est égale à 3 : c'est la hauteur des feuilles $J$ et $K$.
  • Le noeud $D$ possède le plus de noeuds enfants, au nombre de 3. L'arité de l'arbre est donc égale à 3.

Arbres binaires

Nous allons maitenant considérer des arbres d'arité 2, que l'on appelle arbres binaires. Ces arbres sont constitués de noeuds possédant 0,1 ou 2 enfants. À partir d'un noeud, on définit deux sous-arbres disjoints : le sous-arbre gauche (abrégé SAG) et le sous-arbre droit (abrégé SAD).

Décrire chacun des sous-arbres ci-dessus (racine, taille, hauteur, arité).
  • Sous-arbre gauche : Racine B, Taille 6, Hauteur 2, Arité 2
  • Sous-arbre gauche : Racine C, Taille 5, Hauteur 2, Arité 2
Ce sont encore des arbres binaires !
Décrire les sous-arbres gauche et droit du noeud C.
  • Sous-arbre gauche : Racine F, Taille 3, Hauteur 1, Arité 2
  • Sous-arbre droit (c'est une feuille) : Racine G, Taille 1, Hauteur 0, Arité 0

Mesures sur les arbres binaires

Sur un arbre binaire $\alpha$, on peut "prendre des mesures" comme :

Ces mesures seront très utiles pour déterminer la complexité des algorithmes appliqués aux arbres binaires.

Pour l'exemple, reprenons l'arbre binaire précédent, que l'on appelera $\alpha$ :


Déterminer la taille, la hauteur et la profondeur moyenne des arbres binaires suivants.

Pour un arbre binaire de hauteur $h$, déterminer :
  1. Le nombre maximum de feuilles
  2. Le nombre maximum de noeuds
Quelle est la hauteur minimale d'un arbre binaire de taille $n$ ?

Expressions arithmétiques

Une expression arithmétique peut être représentée sous la forme d'un arbre binaire en exprimant une opération dans les noeuds internes et les nombres dans les feuilles. Par exemple, l'expression $7 + (4+5) \times 8$ se représente avec l'arbre ci-dessous :

Quel est le résultat de l'expression arithmétique représentée par l'arbre ci-dessous ?

Le calcul est : $$ (1 + 4) / ((3 + 2) \times (3 - 1)) $$ Le résultat est $\dfrac12 = 0,5$.

Représenter l'opération $1 + 2 \times 2 + 3 \times 3 \times 3$ à l'aide d'un arbre binaire.

Voici une réponse possible (il existe plusieurs solutions) :

Noeuds et étiquettes

Terminons par une remarque : chaque noeud d'un arbre (binaire ou non) est repéré de manière unique par son identifiant, généralement une lettre ou un chiffre. Il est également commun de donner une étiquette à un noeud, qui représente sa valeur. Ainsi, un noeud est comme une variable, représenté par un nom (son identifiant) et associé à une valeur (son étiquette).

Ainsi, deux noeuds peuvent avoir la même étiquette, mais jamais le même identifiant.

Arbres binaires de recherche

Un arbre binaire de recherche est un arbre pour lequel l'étiquette d'un noeud est appelée clé. L'arbre binaire de recherche satisfait aux critères suivants :


Ceci est un arbre binaire de recherche.


Ceci n'est pas un arbre binaire de recherche : 9 est dans le sous-arbre gauche de 7, et 11 est dans le sous-arbre droit de 12.

Un arbre binaire de recherche est dit équilibré si la différence de longueur entre la branche la plus longue et la branche la moins longue est au plus égale à 1.


Arbre de recherche non équilibré : la plus longue branche (50-23-19-17-14-12-9) est de longueur 6, et la plus petite (50-72-76) est de longueur 3


Le même arbre de recherche, mais équilibré : la plus longue branche (50-17-12-9) est de longueur 4, et la plus petite (50-72-76) est de longueur 3

Nous verrons en Algorithmique que la recherche d'un élément est bien plus rapide sur un arbre binaire de recherche équilibré.

L'arbre ci-dessous n'est pas équilibré. Proposer un arbre équilibré constitué des mêmes valeurs.

Une réponse possible est la suivante.
Donner un arbre binaire de recherche équilibré constitué des nombres entiers de 1 à 10.
Une réponse possible est la suivante :

Représentations d'un arbre binaire

Il existe différentes manières de représenter un arbre binaire. Voici les principales.

Sous forme d'un tableau


Seules les étiquettes sont représentées dans l'arbre

Comment reconnaît-on la racine de l'arbre dans le tableau ?
C'est le seul noeud qui n'apparaît pas comme SAG ou SAD !
Après avoir identifié la racine, représenter l'arbre correspondant au tableau ci-dessous.

La racine est D : c'est le seul noeud qui n'apparaît pas dans les colonnes SAG et SAD. Ensuite, on réfléchit un peu...

Donner la représentation de l'arbre binaire ci-dessous sous forme de tableau.

Encore une fois, la réponse n'est pas unique... Si l'on range les noeuds dans par ordre croissant d'étiquette, on obtient le tableau suivant :

Représentation contigüe

Une autre façon de représenter un arbre binaire est un tableau à 1 dimension !
Le tableau, noté $T$, est ordonné de sorte que la case $T_i$ représente l'étiquette du noeud $i$.

Plus généralement, les enfants du noeud $i$ ont pour étiquettes $T_{2i}$ et $T_{2i+1}$.

Si un noeud est une feuille de hauteur non maximale (c'est à dire inférieure stricte à la hauteur de l'arbre), on représente tout de même les étiquettes de ses enfants par une case vide.


Arbre et tableau contigu correspondant

Quel arbre correspond au tableau suivant ?

Quelle est la taille du tableau permettent de représenter un arbre de hauteur $h$ ?
Représenter l'arbre suivant de façon contigüe.

Représentation abstraite

On peut définir un arbre de manière récursive, les sous-arbres d'un noeud étant encore des arbres !

Formellement, on considère les trois opérations de base suivantes :

Ces trois opérations élémentaires permettent de représenter n'importe quel arbre.

# Exemple d'implémentation
            
A = FEUILLE(5)
B = FEUILLE(4)
C = ARBRE(3, B, A)
D = FEUILLE(2)
E = ARBRE(1, D, C)

Ci-dessous, le détail de chaque arbre ainsi créé :

Représenter l'arbre binaire généré par les instructions suivantes :
A = FEUILLE(20)
B = ARBRE(15, A, ARBRE_VIDE())
C = FEUILLE(3)
D = ARBRE(8,C,B)
E = FEUILLE(4)
F = ARBRE(5, ARBRE_VIDE(), E)
G = ARBRE(10, D, F)
Donner la suite d'opérations permettant de créer l'arbre binaire suivant :