Terminale · Algorithmique

Arbres binaires de recherche : rechercher et insérer

Un arbre binaire de recherche permet d’écarter une partie des données à chaque comparaison, à condition que sa propriété d’ordre soit respectée. Sa forme est décisive : les mêmes clés peuvent construire un arbre court ou une longue chaîne, selon leur ordre d’insertion.

SofienAvec SofienIngénieur et enseignant en informatique
Dans ce chapitre

Un cap pour ce chapitre

Ce que vous saurez faire

  • Vérifier la propriété globale d’un ABR.
  • Tracer une recherche et une insertion.
  • Relier le coût à la hauteur.
Les bases utiles pour commencer

Une propriété portant sur des sous-arbres entiers

Nous adoptons une convention sans doublons : toutes les clés du sous-arbre gauche sont strictement inférieures à la clé du nœud, et toutes celles du sous-arbre droit sont strictement supérieures. La règle s’applique récursivement à chaque nœud. Elle ne concerne pas seulement les deux enfants immédiats.

Une racine 8 peut avoir un enfant gauche 3, mais un descendant 12 placé sous ce 3 rendrait l’ensemble invalide : 12 appartient au sous-arbre gauche de 8 tout en étant supérieur à 8. Pour vérifier un ABR, on doit donc conserver les contraintes héritées des ancêtres, sous forme de bornes autorisées.

À chaque descente, conservez un intervalle de clés autorisées. Partir à gauche de 8 fixe une borne supérieure 8 ; aller ensuite à droite de 3 ajoute une borne inférieure 3. Une clé dans cette région doit satisfaire simultanément 3 < clé < 8, et non seulement dépasser 3.

Rechercher en suivant un seul chemin

Pour rechercher une clé k, on compare k à la racine. Si elles sont égales, la recherche réussit. Si k est plus petite, on poursuit seulement à gauche ; sinon seulement à droite. Si l’on atteint un sous-arbre vide, la clé est absente. Ce dernier cas est une conclusion normale, pas une erreur d’exécution.

Dans l’arbre 8, gauche 3 avec enfants 1 et 6, droite 10 avec enfant droit 14, chercher 6 compare successivement 8, 3 puis 6. Chercher 7 suit 8, 3, 6 puis atteint le sous-arbre droit vide de 6. Les comparaisons éliminent des régions entières grâce à la propriété d’ordre.

def contient(arbre, cle):
    # Un nœud est (valeur, gauche, droite) ; None est vide.
    courant = arbre
    while courant is not None:
        valeur, gauche, droite = courant
        if cle == valeur:
            return True
        courant = gauche if cle < valeur else droite
    return False

Insérer au premier emplacement vide

L’insertion suit les mêmes comparaisons qu’une recherche. Lorsque le sous-arbre approprié est vide, on y place la nouvelle feuille. Insérer 7 dans l’exemple le place comme enfant droit de 6. On ne le place pas directement sous 8 au seul motif qu’il est inférieur à 8 : il faut poursuivre les contraintes jusqu’au bon emplacement.

Pour un doublon, plusieurs politiques sont possibles. Ici, nous ne créons pas de nouveau nœud si la clé existe déjà. Une autre convention pourrait autoriser des doublons dans une branche déterminée, mais elle devrait être annoncée et appliquée partout, y compris dans les tests et les parcours.

Cette insertion fonctionnelle renvoie l’arbre obtenu sous forme de tuples. L’appelant doit conserver ce retour, notamment lorsque la racine était vide. Les branches non modifiées peuvent être partagées puisqu’aucun tuple existant n’est muté.

def inserer(arbre, cle):
    if arbre is None:
        return (cle, None, None)
    valeur, gauche, droite = arbre
    if cle < valeur:
        return (valeur, inserer(gauche, cle), droite)
    if cle > valeur:
        return (valeur, gauche, inserer(droite, cle))
    return arbre  # Doublon ignoré.

arbre = None
for cle in [8, 3, 10, 1, 6, 14]:
    arbre = inserer(arbre, cle)

La hauteur gouverne les recherches

Une recherche ne visite qu’un chemin, donc son travail dépend de la hauteur. Dans un arbre suffisamment équilibré, cette hauteur est logarithmique en la taille. Dans une chaîne de n nœuds, une recherche peut effectuer n comparaisons. Un ABR ordinaire ne garantit pas spontanément l’équilibre.

Insérer des clés déjà triées, toujours à droite, crée précisément une chaîne. Le parcours infixe restera trié, mais l’avantage en recherche se sera dégradé. Les mécanismes de rééquilibrage dépassent cette introduction : l’objectif est d’expliquer le lien entre ordre d’insertion, forme, hauteur et coût, sans attribuer un coût logarithmique à tous les arbres.

Exemple suivi : construire l’arbre et ses contraintes

Insérons 8,3,10,1,6,14 puis 4. Huit devient racine. Trois se place à gauche et dix à droite. Un descend à gauche de trois ; six à droite de trois ; quatorze à droite de dix. Pour quatre, on compare 8 puis 3 puis 6 : quatre est inférieur à huit, supérieur à trois, inférieur à six. Le premier emplacement compatible vide est donc le fils gauche de six.

Les bornes héritées y sont 3 et 6. Le nouveau nœud respecte aussi automatiquement la borne supérieure huit. Pour rechercher 5 après cette insertion, on visite 8,3,6,4 puis la droite vide de 4 : quatre comparaisons de clés, sans compter le test de vacuité comme comparaison de valeur. Une absence n’impose pas de parcourir les autres branches, car les comparaisons ont déjà prouvé qu’elles ne peuvent contenir la cible.

Exemple suivi : mesurer l’effet de l’ordre d’insertion

Les clés 1 à 7 insérées dans l’ordre croissant produisent une chaîne de hauteur six. Chercher 7 y examine sept clés. Insérons plutôt 4,2,6,1,3,5,7 : la racine partage les valeurs en deux groupes de trois, puis chaque groupe est partagé à son tour. La hauteur vaut deux et la recherche de 7 examine seulement 4,6,7. Les mêmes clés donnent donc des coûts très différents.

Dans les deux structures, le parcours infixe produit 1,2,3,4,5,6,7. Cette séquence vérifie l’ordre, mais ne mesure pas l’équilibre. Pour comparer, donnez taille, hauteur et nombre de clés réellement comparées sur une recherche précise. La racine se trouve en une comparaison, même dans une longue chaîne ; c’est le pire cas qui se dégrade avec la hauteur. Les doublons sont ignorés dans notre convention et n’augmentent donc ni taille ni hauteur.

À vous de faire varier les choses

Changez l’ordre d’insertion et cherchez une clé

Entrez au plus douze entiers de -99 à 99 séparés par des virgules. Les doublons sont ignorés. Les entrées hors de ce domaine sont signalées ; comparez un ordre trié avec un ordre qui répartit les branches.

Lire le résultat de l’expérience initiale

Sous-arbre vide : clé absente.

Chaque comparaison conserve seulement la branche compatible avec la propriété de recherche.

Clé comparéeDécision
8Chercher à gauche
3Chercher à droite
6Chercher à droite

La propriété d’ordre guide le chemin ; la forme détermine sa longueur possible.

De la compréhension à l’autonomie

À vous de résoudre

Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.

Exercice 1 · Appliquer#

Tracer une absence

Dans l’arbre décrit au cours, quelles clés compare-t-on pour chercher 7 et où conclut-on à son absence ?

Indice 1

Sept est inférieur à huit puis supérieur à trois.

Indice 2

Après six, quelle branche faudrait-il emprunter ?

Comprendre la correction

On compare 8, 3 et 6. Sept est supérieur à six, donc on inspecte son sous-arbre droit, qui est vide. L’absence est alors établie. Il n’est pas nécessaire de visiter 1, 10 ou 14.

Exercice 2 · Appliquer#

Insérer sans casser l’ordre

Où insérer 7 dans cet arbre, et quelle devient la séquence infixe ?

Indice 1

Réutilisez le chemin de la recherche précédente.

Indice 2

Le nouvel élément doit apparaître entre six et huit.

Comprendre la correction

Sept devient enfant droit de six. Le parcours infixe donne 1,3,6,7,8,10,14. La nouvelle feuille respecte à la fois la borne inférieure six et la borne supérieure huit héritée de la racine.

Exercice 3 · Analyser#

Vérifier au-delà des enfants

Une racine vaut 8, son enfant gauche 3, et l’enfant droit de 3 vaut 12. Chaque enfant respecte-t-il son parent ? L’arbre est-il un ABR ?

Indice 1

Trois est inférieur à huit et douze supérieur à trois.

Indice 2

Mais douze appartient aussi au sous-arbre gauche de huit.

Comprendre la correction

Les comparaisons entre parents et enfants semblent correctes, mais l’arbre n’est pas un ABR. Douze viole la borne supérieure huit de tout le sous-arbre gauche. La propriété doit être vérifiée pour les descendants, pas seulement localement.

Exercice 4 · Justifier#

Comparer deux constructions

Insérer 1,2,3,4,5 dans cet ordre construit quelle forme ? Combien de comparaisons demande la recherche de 5 ?

Indice 1

Chaque nouvelle clé dépasse toutes les précédentes.

Indice 2

La recherche suit toute la chaîne.

Comprendre la correction

Chaque nœud a seulement un enfant droit : la hauteur en arêtes vaut quatre. La recherche compare 1,2,3,4 puis 5, soit cinq clés. Le coût est linéaire pour ce cas, même si la structure respecte parfaitement la propriété d’ABR.

Exercice 5 · Problème de synthèse#

Problème : construire puis rechercher

Insérez 5,2,8,1,4,7,9,3 dans un ABR initialement vide, sans doublons. Dessinez la structure, donnez sa hauteur en arêtes puis les clés comparées pour chercher 3 et chercher 6. Où 6 serait-il inséré ?

Indice 1

Trois est à gauche de quatre, lui-même à droite de deux.

Indice 2

Six descend à gauche de huit puis de sept.

Comprendre la correction

L’arbre a racine 5 ; à gauche 2 avec 1 et 4, ce dernier portant 3 à gauche ; à droite 8 avec 7 et 9. La hauteur vaut trois. La recherche de 3 compare 5,2,4,3 ; celle de 6 compare 5,8,7 puis atteint une gauche vide. Six serait inséré à gauche de sept, dans l’intervalle autorisé entre 5 et 7.

Exercice 6 · Problème de synthèse#

Problème : vérifier les bornes héritées

Une racine vaut 10, son enfant gauche 4, et l’enfant droit de 4 vaut 12. Expliquez pourquoi les comparaisons parent-enfant ne détectent pas le défaut. Donnez l’intervalle autorisé à cet emplacement et proposez une valeur de remplacement qui respecte toutes les contraintes.

Indice 1

Le nœud appartient aussi au sous-arbre gauche de 10.

Indice 2

Les deux bornes doivent être vraies en même temps.

Comprendre la correction

Quatre est inférieur à dix et douze supérieur à quatre, donc les comparaisons locales passent. Mais l’emplacement exige 4 < clé < 10. Douze viole la borne héritée de la racine ; une valeur telle que 7 convient. Une vérification récursive doit transmettre les contraintes des ancêtres, pas les oublier à chaque niveau.

Exercice 7 · Problème de synthèse#

Problème : comparer forme et contenu

Construisez les ABR obtenus avec 1,2,3,4,5,6,7 puis 4,2,6,1,3,5,7. Donnez leurs hauteurs, leurs parcours infixes et les comparaisons nécessaires pour chercher 1 puis 7. Réinsérez 4 : qu’est-ce qui change avec la convention du cours ?

Indice 1

Une recherche réussie à la racine ne mesure pas le pire cas.

Indice 2

La même clé n’est jamais créée deux fois.

Comprendre la correction

Les hauteurs sont six et deux. Les deux infixes sont 1 à 7. Dans la chaîne, chercher 1 demande une comparaison et chercher 7 en demande sept ; dans l’arbre réparti, les deux recherches en demandent trois. Réinsérer 4 ne change aucune structure. Le contenu trié est identique, mais le coût dépend du chemin emprunté et de la hauteur.

Les erreurs qui méritent un détour

Vérifier uniquement les enfants immédiats.
Les bornes des ancêtres s’appliquent à tous les descendants.
Annoncer un coût logarithmique sans condition de forme.
Une chaîne est un ABR valide mais donne des recherches linéaires.

La fiche à garder

L’essentiel à retenir

  • L’ordre d’un ABR concerne des sous-arbres entiers.
  • Recherche et insertion suivent un seul chemin de comparaisons.
  • La hauteur et l’ordre d’insertion influencent le coût.

Cette notion au bac

Retrouvez ces idées dans un sujet complet, avec des indices, une correction expliquée et des ateliers.

Le prochain pas

Retrouver le catalogue de Terminale

Ce chapitre s’appuie sur le programme officiel de Terminale (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.