3/8
Précisons maintenant un peu plus les termes désignant les différents composants d’un arbre binaire.
Tout d’abord, chaque élément d’un arbre se nomme un nœud. Les nœuds sont reliés les uns aux autres par
des relations d’ordre ou de hiérarchie. Ainsi on dira qu’un nœud possède un père, c’est-à-dire un nœud qui
lui est supérieur dans cette hiérarchie. Il possède éventuellement un ou deux fils.
Il existe un nœud qui n’a pas de père, on l’appelle alors la racine de l’arbre. Un nœud qui n’a pas de fils est
appelé feuille ou nœud externe. Tout autre nœud de l’arbre sera appelé nœud interne.
Voici donc un schéma qui résume les différents composants d’un arbre :
(a) Structure d’un arbre binaire (b) Arbre binaire complet
Figure 2 – Généralités sur les arbres
Le nombre de niveaux total, autrement dit la distance entre la feuille la plus éloignée et la racine, est appelé
hauteur de l’arbre. Le niveau d’un nœud est appelé profondeur. Sur la figure 2b, l’arbre a une hauteur égale à
2.
On appellera arbre binaire complet tout arbre qui est localement complet, dont chaque nœud interne possède
deux fils et dont toutes les feuilles ont la même profondeur. Dans ce type d’arbre, on peut exprimer le
nombre de nœuds n de l’arbre en fonction de la hauteur h : n = 2h+1 -1.
Avec la vue arborescente, on peut évidemment utiliser une variable i qui parcourt les indices du tableau, mais
on utilise également trois fonctions qui permettent de suivre les liens bidirectionnels (réels ou virtuels) de
l’arborescence :
- gauche(indice) représente les liens pointillés du haut vers le bas de l’arborescence.
Par exemple, dans la figure 1b, gauche(1)=3, gauche(4)=9 et gauche(2)=5.
- droite(indice) représente les liens en trait plein du haut vers le bas de l’arborescence.
Par exemple, dans la figure 1b, droite(1)=4, droite(3)=8 et droite(0)=2.
- pere(indice) représente les liens du bas vers le haut de l’arborescence.
Par exemple, dans la figure 1b, pere(4)=1, pere(7)=3 et pere(2)=0. Par contre pere(0) n’est pas
défini, et sa valeur (null,-1,0,…) importe peu car jamais utilisée dans cet exercice.
Voici un programme Python possible pour la fonction gauche(indice), de complexité temporelle en O(1) :
def gauche (indice) :
'' '' '' Retourne le lien à gauche vers le bas de l'arborescence '' '' ''
return 2*indice+1
5- Écrire un programme Python droite(indice) qui retourne un entier d tel qu’il existe un lien en trait plein du
haut vers le bas reliant les indices i à d. La complexité en temps doit être en O(1).