Parcourir et mesurer un arbre
Insertion et recherche dans un ABR
Chercher : suivre le bon chemin
Rechercher une valeur dans un ABR consiste à descendre depuis la racine, en choisissant à chaque noeud d'aller à gauche (si la valeur cherchée est plus petite) ou à droite (si elle est plus grande), jusqu'à trouver la valeur ou tomber sur un sous-arbre vide.
Schéma : recherche de 7
(8)
/ \
(3) 10
/ \ \
1 (6) 14
/ \ /
4 (7) 13
chemin suivi : 8 -> 3 -> 6 -> 7
7 < 8 : on va a gauche
7 > 3 : on va a droite
7 > 6 : on va a droite
7 = 7 : trouve !
Insérer : même logique, jusqu'à une place vide
Insérer une valeur suit exactement le même chemin que la recherche, mais quand on arrive sur un sous-arbre vide, on y crée le nouveau noeud.
Schéma : insertion de 5
descente :
5 < 8 : on va a gauche (noeud 8)
5 > 3 : on va a droite (noeud 3)
5 < 6 : on va a gauche (noeud 6)
5 > 4 : sous-arbre droit vide, on insere ici (noeud 4)
apres insertion :
8
/ \
3 10
/ \ \
1 6 14
/ \ /
4 7 13
\
5
Implémentation en Python
class Noeud:
def __init__(self, valeur):
self.valeur = valeur
self.gauche = None
self.droit = None
def inserer(noeud, valeur):
if noeud is None:
return Noeud(valeur)
if valeur < noeud.valeur:
noeud.gauche = inserer(noeud.gauche, valeur)
else:
noeud.droit = inserer(noeud.droit, valeur)
return noeud
def rechercher(noeud, valeur):
if noeud is None:
return False
if valeur == noeud.valeur:
return True
if valeur < noeud.valeur:
return rechercher(noeud.gauche, valeur)
return rechercher(noeud.droit, valeur)
Piège classique
Oublier de réaffecter le résultat de l'appel récursif (noeud.gauche = inserer(...)) est une erreur très fréquente : sans cette réaffectation, le nouveau noeud est bien créé, mais jamais réellement rattaché à l'arbre existant.

