Contenus | Capacités attendues | Commentaires |
---|---|---|
Arbres : structures hiérarchiques. Arbres binaires : nœuds, racines, feuilles, sous-arbres gauches, sous-arbres droits. | Identifier des situations nécessitant une structure de données arborescente. Évaluer quelques mesures des arbres binaires (taille, encadrement de la hauteur, etc.). | On fait le lien avec la rubrique « algorithmique ». |
Image par Birger Eriksson — Travail personnel, CC BY-SA 3.0, Lien
Dans ce chapitre, on présente une nouvelle structure de donnée: les arbres qui sont particulièrement adaptés à la représentation des données hiérarchiques comme un arbre généalogique ou encore le DOM d'une page
html
.
Un arbre est constitué de nœuds reliés par des arêtes. Souvent les nœuds ont une valeur: l'étiquette.
Un arbre enraciné (ou arborescence) possède à sa base une racine auxquels sont reliés d'autres nœuds qui sont ses descendants.
By Paddy3118 - Own work, CC BY-SA 4.0, Link
Un nœud situé à l'extrémité de l'arbre qui n'a donc pas de descendants est une feuille.
Chaque nœud peut avoir un nombre quelconque de nœuds fils, mais il n'a qu'un nœud père (sauf la racine qui n'a pas de nœud père).
La profondeur d'un nœud est la distance, c’est-à-dire, le nombre d'arêtes de la racine au nœud.
La hauteur d'un arbre est la plus grande profondeur d'une feuille de l'arbre.
La taille d'un arbre est son nombre de nœuds.
Reproduire l'arbre ci-dessus, et l'annoter en légendant:
Calculer la hauteur et la taille de cet arbre.
Les arbres binaires sont un type d'arbres particuliers pour lesquels chaque nœud a au plus deux fils.
Image par Derrick Coetzee — Travail personnel basé sur : Binary tree.png, Domaine public, Lien
Comme chaque nœud d'un arbre binaire a au plus deux enfants, on définit les sous arbres gauche et sous arbre droit d'un nœud.
CC-BY-SA David Roche
:: prop
Un arbre binaire est une structure de données récursive. Tout nœud d'un arbre binaire est un arbre binaire.
:::
On peut ainsi définir une class
e ArbreBinaire
récursive comme suit:
class ArbreBinaire:
"""Structure de donnée d'arbre binaire
Attributs
---------
data: type simple int, float, str
étiquette du nœud
gauche: objet de type ArbreBinaire ou None si vide
sous-arbre gauche
droit: objet de type ArbreBinaire ou None si vide
sous-arbre droit
"""
def __init__(self, data, gauche=None, droit=None):
self.data = data
self.gauche = gauche
self.droit = droit
Écrire la séquence d'instructions permettant de construire l'arbre binaire présenté en exemple ci-dessus.
Il existe diverses façons de parcourir les nœuds d'un arbre.
Le parcours en largeur d'abord: les nœuds sont parcourus étage par étage, de haut en bas et de gauche à droite.
By Blake Matheny - Transferred from en.wikipedia to Commons., CC BY-SA 3.0, Link
Le parcours en profondeur d'abord: on explore complétement un sous-arbre avant de commencer l'exploration de l'autre. Il existe trois façons de faire:
Parcours en profondeur d'abord d'un exemple d'arbre:
By original images by Pluke, Miles, overlay by User:Jochen Burghardt - File:Sorted binary tree preorder.svg, File:Sorted binary tree inorder.svg, File:Sorted binary tree postorder.svg, Public Domain, Link
Donner les quatre ordres de parcours de l'arbre ci-dessous qui représente une expression arithmétique.
By original image by User:Emergie, modifications by User:Jochen Burghardt - File:AST binary tree arithmetic.svg, numbers replaced by variables, added grey background for nodes, Public Domain, Link
Quel parcours représente la notation habituelle de nos calculatrices actuelles?
Il s'agit d'un arbre binaire dans lequel toutes les valeurs dans le sous-arbre gauche d'un nœud sont inférieures à la valeur à la racine de l'arbre et toutes les valeurs dans le sous-arbre droit d'un nœud sont supérieures ou égales à la valeur à la racine de l'arbre.
Domaine public, Lien
Un arbre binaire de recherche permet des opérations rapides pour rechercher une clé, insérer ou supprimer une clé que nous verrons dans la partie algorithmique.
Comparer le nombre d'opérations nécessaires à la recherche de l'élément 15 dans l'arbre ci-dessus: