Les Arbres

1. Qu’est-ce qu’un arbre ?

Un arbre est une structure de données hiérarchique utilisée pour représenter des données organisées en niveaux, comme une organisation, un dossier, ou une famille.

Définition formelle :

Propriétés importantes :


2. Pourquoi utiliser un arbre ?


3. Arbre binaire : définition et particularités

Un arbre binaire est un arbre où chaque nœud a au maximum deux enfants distincts :

Cela limite la structure à deux sous-arbres par nœud, ce qui simplifie certaines opérations.


Propriétés spécifiques à l’arbre binaire


4. Représentation et structure d’un nœud en Python

On peut modéliser un nœud d’arbre binaire par une classe :

class Noeud:
    def __init__(self, valeur, gauche=None, droite=None):
        self.valeur = valeur    # La donnée stockée
        self.gauche = gauche    # Sous-arbre gauche (Noeud ou None)
        self.droite = droite    # Sous-arbre droit (Noeud ou None)

Chaque nœud « pointe » vers ses enfants, ou vers None s’il n’en a pas.


5. Parcours d’un arbre binaire

Parcourir un arbre signifie visiter tous ses nœuds dans un ordre précis. Il existe 3 parcours principaux, très importants en algorithmique.

5.1 Parcours préfixe (Nœud-Gauche-Droite)

Schéma du parcours :

Premier passage → visite nœud

Deuxième passage → sous-arbre gauche

Troisième passage → sous-arbre droit

def parcours_prefixe(noeud):
    if noeud:
        print(noeud.valeur)           # 1er passage
        parcours_prefixe(noeud.gauche) # 2e passage
        parcours_prefixe(noeud.droite) # 3e passage

5.2 Parcours infixe (Gauche-Nœud-Droite)

Schéma :

Premier passage → sous-arbre gauche

Deuxième passage → visite nœud

Troisième passage → sous-arbre droit

def parcours_infixe(noeud):
    if noeud:
        parcours_infixe(noeud.gauche) # 1er passage
        print(noeud.valeur)           # 2e passage
        parcours_infixe(noeud.droite) # 3e passage
Ce parcours est très utilisé car, sur un arbre binaire de recherche, il affiche les valeurs dans l’ordre croissant.

5.3 Parcours postfixe (Gauche-Droite-Nœud)

Schéma :

Premier passage → sous-arbre gauche

Deuxième passage → sous-arbre droit

Troisième passage → visite nœud

def parcours_postfixe(noeud):
    if noeud:
        parcours_postfixe(noeud.gauche) # 1er passage
        parcours_postfixe(noeud.droite) # 2e passage
        print(noeud.valeur)             # 3e passage

6. Arbre binaire de recherche (ABR)

Un arbre binaire de recherche est un arbre binaire qui respecte une propriété clé :

Pour chaque nœud, toutes les valeurs du sous-arbre gauche sont strictement inférieures à la valeur du nœud,

et toutes les valeurs du sous-arbre droit sont strictement supérieures à la valeur du nœud.

Pourquoi cette propriété est importante ?

Elle permet :


6.1 Recherche dans un ABR

Pour rechercher une valeur x :


6.2 Insertion dans un ABR

Pour insérer une valeur x :


6.3 Suppression dans un ABR

La suppression est plus complexe car il faut préserver la propriété ABR :


7. Pourquoi apprendre les arbres binaires ?


8. Résumé

NotionDescription
ArbreStructure hiérarchique, nœuds reliés sans cycles
Arbre binaireArbre où chaque nœud a max 2 enfants (gauche, droite)
NœudÉlément avec une valeur + liens vers enfants
Parcours préfixeVisite nœud → gauche → droite
Parcours infixeVisite gauche → nœud → droite (affiche trié pour ABR)
Parcours postfixeVisite gauche → droite → nœud
ABRArbre binaire avec propriété ordre : sous-arbre gauche < nœud < sous-arbre droit