Bonjour,
Dans la leçon précédente, nous avons implémenté les opérations d'insertion et de recherche dans un Arbre Binaire de Recherche (ABR). Nous avons conclu que leur efficacité semblait liée à la hauteur de l'arbre, et nous nous sommes interrogés sur l'impact de l'ordre d'insertion des clés.
Aujourd'hui, nous allons formaliser cette intuition. L'objectif est d'analyser la complexité des opérations sur un ABR dans le meilleur et le pire des cas. Comprendre cette dualité est une étape critique dans la préparation à l'Agrégation, car elle justifie l'existence de structures de données plus complexes, comme les arbres auto-équilibrants, que nous aborderons plus tard. Nous analyserons la complexité des opérations de recherche, d'insertion et de suppression.
1. La Hauteur de l'Arbre : Le Facteur Déterminant
Les opérations fondamentales sur un ABR (recherche, insertion, et comme nous le verrons, suppression) partagent une caractéristique commune : elles consistent à parcourir un chemin depuis la racine jusqu'à un certain point dans l'arbre.
- Recherche : on descend jusqu'à trouver l'élément ou atteindre une feuille.
- Insertion : on descend jusqu'à trouver l'emplacement vide où insérer le nouvel élément.
- Suppression : on descend pour trouver l'élément à supprimer, puis on effectue potentiellement une autre recherche (celle du successeur, par exemple).
Dans tous les cas, le nombre d'étapes est proportionnel à la longueur du chemin parcouru. Dans le pire des cas, ce chemin s'étend de la racine à la feuille la plus profonde. La complexité de ces opérations est donc directement proportionnelle à la hauteur de l'arbre, notée . Nous pouvons donc affirmer que la complexité temporelle de la recherche, de l'insertion et de la suppression est en .
La question cruciale devient alors : comment la hauteur se rapporte-t-elle au nombre de nœuds dans l'arbre ? La réponse dépend entièrement de la structure de l'arbre, qui est elle-même le résultat de l'ordre dans lequel les éléments ont été insérés.
2. Le Pire des Cas : L'Arbre Dégénéré
Imaginons que nous insérions les clés [10, 20, 30, 40, 50] dans un ABR initialement vide.
- On insère 10 (racine).
- On insère 20 (> 10), qui devient le fils droit de 10.
- On insère 30 (> 20), qui devient le fils droit de 20.
- ... et ainsi de suite.
L'arbre résultant est une longue chaîne de fils droits. On l'appelle un arbre dégénéré ou filiforme (en français, on parle parfois de "peigne").
Pour visualiser les différentes formes que peuvent prendre les arbres, y compris la forme dégénérée, observez l'image suivante.

Dans un arbre dégénéré contenant nœuds, la hauteur est égale à . La complexité des opérations devient donc . L'ABR a perdu tout son avantage et se comporte comme une simple liste chaînée.
La vidéo suivante illustre parfaitement ce pire cas.
Data structures: Binary Search Tree
Cette courte section de la vidéo de mycodeschool montre visuellement comment un ABR peut devenir déséquilibré et pourquoi sa complexité se dégrade.
Regardez la section de 16:17 à 17:14. L'animateur y présente un arbre dégénéré et explique pourquoi la recherche y est en O(n), car l'espace de recherche n'est réduit que d'un seul élément à chaque étape.
3. Le Meilleur des Cas : L'Arbre Équilibré
Le scénario idéal est celui où l'arbre est le plus "touffu" et le moins "haut" possible pour un nombre de nœuds donné. C'est le cas d'un arbre équilibré.
Formellement, un arbre binaire est dit équilibré si, pour chaque nœud, les hauteurs de ses sous-arbres gauche et droit ne diffèrent pas de plus de 1. Dans un tel arbre, les nœuds sont répartis de manière homogène.

Dans un arbre binaire parfaitement équilibré, à chaque niveau k, on peut avoir jusqu'à nœuds. Inversement, pour stocker nœuds, il faut une hauteur telle que . En résolvant pour , on trouve que la hauteur est de l'ordre de . Donc, pour un arbre équilibré, .
Dans ce cas, la complexité des opérations (recherche, insertion, suppression) atteint son optimum : .
Pour bien saisir cette idée, la vidéo suivante propose une analogie très efficace avec la recherche binaire sur un tableau trié.
Data structures: Binary Search Tree
Cette section de la même vidéo de mycodeschool explique pourquoi la recherche dans un ABR équilibré est aussi efficace que la recherche binaire.
Regardez de 08:48 à 16:17. L'explication met en parallèle le mécanisme de la recherche binaire dans un tableau et la recherche dans un ABR. Le point clé est de comprendre qu'à chaque étape, on élimine environ la moitié des nœuds restants, ce qui mène directement à une complexité logarithmique.
4. Synthèse et Analyse de la Suppression
Nous pouvons maintenant résumer l'analyse de complexité. Pour une étude plus formelle et pour vous familiariser avec les ressources francophones de haut niveau, je vous propose de lire l'extrait suivant.
[PDF] ARBRES BINAIRES ET ABR - IOCPGE
Ce document de l'IOCPGE synthétise de manière concise et précise l'analyse de complexité des opérations sur les ABR.
Lisez le court paragraphe intitulé "Opérations sur les arbres binaires de recherche" (début du chunk 13, juste après la figure 10). Il énonce clairement que la complexité des opérations est en O(h), puis détaille le pire cas (O(n) pour un peigne) et le meilleur cas (O(log n) pour un arbre équilibré).
Le document énonce clairement que la recherche, l'insertion et la suppression sont toutes des opérations en . Mais pourquoi la suppression, qui peut sembler plus complexe, suit-elle la même logique ?
La vidéo suivante, bien que détaillée, analyse la complexité de chaque opération, y compris la suppression, et confirme nos conclusions.
Recitation 5: Recursion Trees, Binary Search Trees
Cette récitation du MIT, que vous pouvez regarder en vitesse accélérée, formalise l'analyse de complexité pour les opérations de recherche, d'insertion et de suppression. L'analyse de la suppression est particulièrement pertinente comme préparation à notre prochaine leçon.
Regardez la section de 29:39 à 31:49 : L'instructeur y analyse la complexité de la recherche (Find) et de l'insertion (Insert), confirmant qu'elle est en O(h) et peut devenir O(n) dans le pire cas. Regardez ensuite l'analyse de la suppression (Delete) de 49:03 à 51:06. Notez que le coût se décompose en une recherche du nœud (O(h)), potentiellement suivie d'une recherche du successeur (O(h)), menant à une complexité totale de O(h).
En résumé, l'opération de suppression (que nous implémenterons dans la prochaine leçon) consiste à :
- Rechercher le nœud à supprimer : coût .
- Dans le cas le plus complexe (le nœud a deux enfants), trouver son successeur (ou prédécesseur) : coût dans le pire cas.
- Réarranger quelques pointeurs : coût .
La complexité totale est donc dominée par les parcours de l'arbre, restant en .
Voici un tableau récapitulatif :
| Cas | Structure de l'arbre | Hauteur | Complexité (Recherche, Insertion, Suppression) |
|---|---|---|---|
| Meilleur | Équilibré | ||
| Pire | Dégénéré ("Peigne") | ||
| Moyen | Aléatoire |
Le cas moyen, pour des insertions de données aléatoires, tend heureusement vers un arbre assez bien équilibré, donnant une complexité en . C'est un résultat de combinatoire analytique qui dépasse le cadre de cette leçon, mais qui est essentiel en pratique.
Conclusion
Cette leçon a formalisé un point absolument central en algorithmique : la performance d'une structure de données est intimement liée à sa forme.
Points clés à retenir :
- Les opérations de base sur un ABR (recherche, insertion, suppression) ont une complexité temporelle en , où est la hauteur de l'arbre.
- Dans le pire des cas (arbre dégénéré, par ex. insertion de données triées), et l'ABR n'est pas plus performant qu'une liste chaînée.
- Dans le meilleur des cas (arbre équilibré), , et l'ABR offre des performances de recherche, d'insertion et de suppression extrêmement efficaces.
- La grande question en pratique n'est pas seulement "comment utiliser un ABR ?", mais "comment s'assurer qu'il reste équilibré ?".
Prochaine étape :
Maintenant que nous avons une compréhension complète des performances de l'ABR et de ses limites, nous sommes prêts à implémenter la dernière opération fondamentale : la suppression d'un nœud. Cette opération est plus délicate que l'insertion, car elle requiert la gestion de trois cas distincts (nœud sans enfant, avec un enfant, ou avec deux enfants) pour maintenir la propriété de l'ABR.