1. Qu'est-ce qu'un arbre binaire ?

Un arbre binaire est une structure hiérarchique où chaque nœud a au maximum deux enfants (fils gauche et fils droit).

Vocabulaire
Racine : le nœud du sommet. Feuille : un nœud sans fils. Sous-arbre gauche/droit : le mini-arbre formé à partir d'un nœud. Taille : nombre total de nœuds. Profondeur d'un nœud : distance à la racine (convention : racine à la profondeur 1). Hauteur : la plus grande profondeur de l'arbre.

2. Exercice 1 — Lecture de vocabulaire

Sur l'arbre fourni en support : a) racine ? b) feuilles ? c) profondeur d'un nœud donné ? d) hauteur ? e) taille ?

3. Les arbres sont des structures récursives

Un arbre binaire est soit vide, soit un nœud racine avec deux sous-arbres (éventuellement vides), eux-mêmes des arbres binaires. C'est la base de la récursivité.

4. Formes extrêmes et encadrement

Filiforme (dégénéré) : chaque nœud n'a qu'un seul fils, hauteur = n. Complet/parfait : tous les niveaux remplis, hauteur ≈ log₂(n). Pour tout arbre : log₂(n) ≤ h ≤ n - 1.

5. Exercice 2 — Encadrement taille/hauteur

a) Nœuds max d'un arbre complet de hauteur 6 ? b) Encadrement de la hauteur pour n = 24 ? c) Dessine un arbre de hauteur 4 avec un maximum de nœuds.

Voir la réponse
a) 2⁶ - 1 = 63 nœuds au maximum.
b) log₂(24) ≈ 4,58 → 4 ≤ h ≤ 23.
c) Arbre complet de hauteur 4 : 1+2+4+8 = 15 nœuds (2⁴ - 1).

6. Exercice 3 — Implémentation avec la classe Noeud

class Noeud:
    def __init__(self, e, g=None, d=None):
        self.etiquette = e
        self.gauche = g
        self.droit = d

    def est_feuille(self):
        return self.gauche is None and self.droit is None

a) Construis : racine 2, fils gauche 8 (fils 4, 5), fils droit 9 (fils droit 3). b) Affiche l'arbre. c) Vérifie est_feuille() sur le nœud 4.

Voir la réponse
A1 = Noeud(2, Noeud(8, Noeud(4), Noeud(5)), Noeud(9, None, Noeud(3)))
print(A1)   # 2-(8-(4,5),9-(None,3))
print(A1.gauche.gauche.est_feuille())   # True

7. Exercice 4 — hauteur() et taille() récursives

a) Complète taille(A). b) Complète hauteur(A) (arbre vide → -1). c) Teste sur l'arbre construit.

Voir la réponse
def taille(A):
    if A is None:
        return 0
    return 1 + taille(A.gauche) + taille(A.droit)

def hauteur(A):
    if A is None:
        return -1
    return 1 + max(hauteur(A.gauche), hauteur(A.droit))

Exercices défis (bonus)

Défi 1 — Arbre parfait défi
Voir la réponse
def parfait(h):
    if h == 0:
        return None
    return Noeud(f'Niveau{h}', parfait(h-1), parfait(h-1))
Défi 2 — Peigne gauche défi
Voir la réponse
def peigne_gauche(h):
    if h == 0:
        return None
    return Noeud(f'Niveau{h}', peigne_gauche(h-1), None)
Défi 3 — Nombres de Catalan défi

Combien de formes d'arbres binaires différentes existent pour 5 nœuds ?

Voir la réponse
C₅ = (1/6) × C(10,5) = 42 formes différentes.