Menu
Coddy logo textTech

Arbre binaire de recherche (ABR)

Dernière mise à jour

Un arbre binaire de recherche garde ses valeurs triées : pour chaque nœud, toutes les valeurs de son sous-arbre gauche sont plus petites et toutes celles de son sous-arbre droit sont plus grandes. Pour insérer ou trouver une valeur, vous partez de la racine et allez à gauche ou à droite selon la comparaison, de sorte que chaque étape divise par deux l'espace de recherche. Appuyez sur lecture ci-dessus pour voir les valeurs placées par comparaison et une recherche descendre dans l'arbre.

Sur un arbre équilibré, ces opérations s'exécutent en temps O(log n). Le piège : insérer des données déjà triées fait dégénérer l'arbre en une liste chaînée avec des opérations en O(n), ce qui explique précisément l'existence de variantes auto-équilibrées comme les arbres AVL et rouge-noir.

Complexité en temps et en espace

OpérationÉquilibréPire cas (déséquilibré)
RechercheO(log n)O(n)
InsertionO(log n)O(n)
SuppressionO(log n)O(n)
EspaceO(n)O(n)

Étape par étape (insertion)

ÉtapeCe qui se passe
1Si l'arbre est vide, la nouvelle valeur devient la racine.
2Sinon, commencer à la racine.
3Si la valeur est plus petite, aller au fils gauche ; si elle est plus grande, aller à droite.
4Répéter jusqu'à atteindre un emplacement vide.
5Y attacher la nouvelle valeur comme feuille.

Exemple détaillé

Insertion de [5, 3, 8, 1, 4] dans un arbre vide, une valeur à la fois :

InsérerChemin suiviAction
5-L'arbre est vide, donc 5 devient la racine.
353 < 5, aller à gauche ; l'emplacement est vide, attacher 3 comme fils gauche de 5.
858 > 5, aller à droite ; l'emplacement est vide, attacher 8 comme fils droit de 5.
15 -> 31 < 5 aller à gauche, puis 1 < 3 aller à gauche ; attacher 1 comme fils gauche de 3.
45 -> 34 < 5 aller à gauche, puis 4 > 3 aller à droite ; attacher 4 comme fils droit de 3.

Quand utiliser un arbre binaire de recherche

À utiliser quandÀ éviter quand
Vous avez besoin d'un ordre trié et de recherches rapides, et les insertions arrivent dans un ordre aléatoire.Vos données arrivent déjà triées : un ABR déséquilibré dégrade à O(n) par opération.
Vous voulez qu'un parcours infixe rende les valeurs en séquence triée gratuitement.Vous n'avez besoin que de tests d'appartenance sans ordre : une table de hachage offre des recherches en O(1) en moyenne.
Vous avez besoin de requêtes par intervalle ou du successeur/prédécesseur d'une clé.Vous avez besoin de garanties en O(log n) : optez plutôt pour un arbre auto-équilibré AVL ou rouge-noir.
Le jeu de données change souvent et mettre à jour un tableau trié serait coûteux.Le jeu de données est fixe et en lecture seule : un tableau trié avec recherche binaire est plus simple et adapté au cache.

Code de Binary Search Tree

Une implémentation propre et exécutable de Binary Search Tree en Python, JavaScript, Java, C++, C. Choisissez un langage, copiez le code ou ouvrez-le préchargé dans le Playground Coddy.

Code de Binary Search Tree en Python

Python
1class Node:2    def __init__(self, key):3        self.key = key4        self.left = None5        self.right = None6
7
8def insert(node, key):9    if node is None:10        return Node(key)11    if key < node.key:12        node.left = insert(node.left, key)13    elif key > node.key:14        node.right = insert(node.right, key)15    return node  # duplicates are ignored16
17
18def search(node, key):19    if node is None:20        return False21    if key == node.key:22        return True23    if key < node.key:24        return search(node.left, key)25    return search(node.right, key)26
27
28def inorder(node):29    if node is None:30        return []31    return inorder(node.left) + [node.key] + inorder(node.right)32
33
34root = None35for key in [8, 3, 10, 1, 6, 14, 4, 7]:36    root = insert(root, key)37
38print("Inorder (sorted):", inorder(root))39print("search(6): ", search(root, 6))40print("search(5): ", search(root, 5))
Exécutez ce code dans le Playground Python

FAQ sur l'arbre binaire de recherche

Quelle est la complexité temporelle d'un arbre binaire de recherche ?
La recherche, l'insertion et la suppression sont en O(log n) sur un arbre équilibré, car chaque comparaison écarte la moitié des nœuds restants. Dans le pire cas - un arbre déséquilibré en chaîne à cause d'insertions triées - elles dégradent à O(n).
Quelle est la différence entre un arbre binaire et un arbre binaire de recherche ?
Un arbre binaire est tout arbre où chaque nœud a au plus deux fils, sans règle d'ordre. Un arbre binaire de recherche ajoute l'invariant selon lequel les valeurs du sous-arbre gauche sont plus petites et celles du sous-arbre droit plus grandes que le nœud, ce qui permet une recherche rapide.
Pourquoi un arbre binaire de recherche peut-il devenir lent ?
Si les valeurs sont insérées dans l'ordre trié (ou inverse), chaque nouveau nœud va du même côté, produisant un arbre haut et déséquilibré qui se comporte comme une liste chaînée : O(n) par opération. Les arbres auto-équilibrés (AVL, rouge-noir) effectuent des rotations de nœuds pour éviter cela.
Quelle est la différence entre un arbre binaire de recherche et une table de hachage ?
Une table de hachage offre des recherches en O(1) en moyenne mais stocke les clés sans ordre particulier, elle ne peut donc pas répondre aux requêtes par intervalle ou de successeur. Un arbre binaire de recherche est un peu plus lent en O(log n) mais garde les clés triées, ce qui permet de les parcourir dans l'ordre et de trouver les valeurs voisines. Choisissez un ABR quand l'ordre compte et une table de hachage quand vous n'avez besoin que de tests d'appartenance.
Quand devrais-je utiliser un arbre auto-équilibré plutôt qu'un ABR simple ?
Utilisez un arbre auto-équilibré (AVL, rouge-noir) chaque fois que vous ne pouvez pas contrôler l'ordre d'insertion et que vous avez besoin de performances garanties en O(log n). Un ABR simple convient pour l'enseignement, pour de petits jeux de données ou quand les clés arrivent dans un ordre aléatoire, mais il n'offre aucune protection contre le pire cas déséquilibré.
Un parcours infixe d'un ABR renvoie-t-il des valeurs triées ?
Oui. Visiter le sous-arbre gauche, puis le nœud, puis le sous-arbre droit rend les clés dans l'ordre croissant, ce qui découle directement de l'invariant de l'ABR. Une erreur courante est d'attendre la même chose d'un arbre binaire simple : sans la règle d'ordre, le parcours infixe ne produit aucune séquence significative.
Coddy programming languages illustration

Maîtrisez les algorithmes avec Coddy

COMMENCER