Terminale · Algorithmique

Parcourir un arbre binaire

Visiter tous les nœuds d’un arbre ne fixe pas encore leur ordre. Veut-on traiter un dossier avant ses sous-dossiers, calculer ses enfants avant lui, ou progresser niveau par niveau ? Les parcours d’arbres correspondent à ces choix et produisent des séquences différentes sur une même structure.

SofienAvec SofienIngénieur et enseignant en informatique
Dans ce chapitre

Un cap pour ce chapitre

Ce que vous saurez faire

  • Construire quatre ordres de parcours.
  • Relier ordre de traitement et structure utilisée.
  • Distinguer visite d’un nœud et parcours d’un sous-arbre.
Les bases utiles pour commencer

Fixer un arbre et une convention

Utilisons l’arbre de racine 8, avec à gauche 3 et à droite 10. Le nœud 3 possède les enfants 1 et 6 ; le nœud 10 possède uniquement un enfant droit 14. Pour tous les parcours présentés, gauche précède droite lorsque deux choix sont possibles.

Visiter signifie ici écrire l’étiquette du nœud dans le résultat. Traverser une structure peut demander d’entrer dans un sous-arbre, d’y réaliser plusieurs visites puis de revenir à son parent. Le moment où l’on écrit le parent donne trois parcours récursifs fondamentaux : préfixe, infixe et suffixe.

Une façon de travailler sur papier consiste à écrire trois emplacements autour de chaque nœud : avant le parcours gauche, entre gauche et droite, après le parcours droit. Choisir le même emplacement pour toutes les visites produit respectivement préfixe, infixe ou suffixe. Il ne faut pas changer de règle en descendant.

Placer la racine avant, entre ou après

En préfixe, on visite la racine, puis tout le sous-arbre gauche, puis tout le sous-arbre droit. Notre résultat est 8,3,1,6,10,14. En infixe, on parcourt d’abord le sous-arbre gauche, puis on visite la racine, puis le sous-arbre droit : 1,3,6,8,10,14.

En suffixe, on traite les deux sous-arbres avant leur racine : 1,6,3,14,10,8. Les mots « gauche » et « droite » désignent ici des parcours complets, pas seulement les enfants immédiats. Appliquer une règle une seule fois à la racine ne suffit donc pas ; la même règle est répétée récursivement dans chaque sous-arbre.

Le code suivant représente chaque nœud par (étiquette, gauche, droite), avec None pour le vide. Le paramètre ordre fixe la position du seul ajout au résultat. Les trois branches ne s’exécutent pas ensemble : une seule correspond à l’ordre choisi.

def parcours(arbre, ordre="in"):
    assert ordre in ("pre", "in", "post")
    resultat = []
    def visiter(a):
        if a is None:
            return
        if ordre == "pre":
            resultat.append(a[0])
        visiter(a[1])
        if ordre == "in":
            resultat.append(a[0])
        visiter(a[2])
        if ordre == "post":
            resultat.append(a[0])
    visiter(arbre)
    return resultat

Explorer niveau par niveau avec une file

Le parcours en largeur visite d’abord la racine, puis ses enfants, puis leurs enfants. Pour notre arbre, cela donne 8,3,10,1,6,14. Une file conserve les nœuds découverts dont les enfants n’ont pas encore été ajoutés. On défile un nœud, on le visite et on enfile ses enfants existants, gauche puis droite.

La file respecte l’ordre d’arrivée : les nœuds d’un niveau ont été ajoutés avant ceux du suivant. Remplacer cette file par une pile change le comportement et ne conserve pas cette progression par niveaux. Les choix de structure et d’ordre d’ajout doivent être explicités pour obtenir une trace reproductible.

Choisir un parcours pour un besoin

Le suffixe convient lorsque le résultat d’un parent dépend de résultats déjà calculés pour ses enfants, comme une expression arithmétique représentée par un arbre. Le préfixe peut servir à décrire une hiérarchie en annonçant le parent avant son contenu. La largeur permet de travailler par niveaux.

Un parcours infixe d’un arbre binaire quelconque ne trie pas ses étiquettes. Il donne un ordre croissant lorsque l’arbre respecte la propriété d’un arbre binaire de recherche avec une convention cohérente sur les doublons. Les quatre parcours visitent chaque nœud une fois, mais ne demandent pas nécessairement la même mémoire auxiliaire.

Exemple suivi : une expression arithmétique

Représentons (2+3)×4 par une racine ×, un enfant gauche + portant les feuilles 2 et 3, et un enfant droit 4. Le préfixe donne ×,+,2,3,4 : chaque opération est annoncée avant ses opérandes. Le suffixe donne 2,3,+,4,× : quand + arrive, ses deux opérandes sont déjà disponibles ; quand × arrive, la somme et 4 le sont également.

Pour évaluer le suffixe avec une pile, on empile 2 puis 3, on les remplace par 5 lors de +, on empile 4 puis on remplace 5 et 4 par 20 lors de ×. L’ordre infixe donne 2,+,3,×,4, mais des parenthèses sont nécessaires pour retrouver sans ambiguïté l’expression originale. Le seul ordre des étiquettes n’exprime pas toujours toute la structure : annoncer une convention de représentation est indispensable.

Exemple suivi : observer la file et la mémoire

Sur l’arbre A avec enfants B et C, B ayant enfants D et E, et C ayant un seul enfant F, la file débute par [A]. Après A elle vaut [B,C] ; après B, [C,D,E] ; après C, [D,E,F]. Le résultat déjà écrit est alors A,B,C. Les nœuds D et E ne passent pas avant C, même si on les découvre pendant le traitement de B.

Une chaîne n’a qu’un nœud à chaque niveau, donc la file reste petite. Un arbre très large peut au contraire conserver beaucoup de nœuds simultanément. Pour un parcours récursif en profondeur, la pile d’appels suit principalement un chemin et dépend de la hauteur. Tous les parcours visitent le même nombre de nœuds, mais le stockage temporaire diffère. Dans l’atelier, les visites futures sont masquées : utilisez le dessin et la règle du parcours pour prévoir la prochaine étiquette.

À vous de faire varier les choses

Un arbre, quatre ordres à explorer

Choisissez un ordre puis révélez les visites progressivement. Comparez une forme ramifiée et une chaîne.

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

1 → 3 → 6

L’ordre gauche avant droite est fixé. Déplacez le curseur pour vérifier la prochaine visite.

PositionNœud révélé
11
23
36

Le même arbre produit plusieurs séquences correctes, chacune définie par une règle de visite précise.

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 · Comprendre#

Placer la racine

Dans quels parcours récursifs la racine est-elle visitée en premier, entre les sous-arbres, puis en dernier ?

Indice 1

Pré signifie avant.

Indice 2

Suffixe place la racine après les deux sous-arbres.

Comprendre la correction

Préfixe : racine en premier. Infixe : entre le parcours gauche et le parcours droit. Suffixe : racine en dernier. Cette position est appliquée à chaque sous-arbre, pas seulement à la racine globale.

Exercice 2 · Appliquer#

Construire un parcours

Un arbre a pour racine A, enfant gauche B, enfant droit C ; B a un enfant droit D. Donnez son parcours suffixe.

Indice 1

Le sous-arbre de B se termine par B.

Indice 2

La racine A vient après les deux sous-arbres.

Comprendre la correction

Le résultat est D,B,C,A. Dans le sous-arbre gauche, D est traité avant B ; C est ensuite visité ; A termine. Écrire B,D,C,A serait traiter B avant son enfant et ne respecterait pas le suffixe.

Exercice 3 · Appliquer#

Suivre la file

Avec ce même arbre, quelle est la file après avoir visité A puis B dans un parcours en largeur, gauche avant droite ?

Indice 1

Après A, la file contient B puis C.

Indice 2

Défilez B puis ajoutez son enfant D en fin.

Comprendre la correction

La file contient C puis D. C a été découvert au niveau précédent et reste prioritaire sur D. Le parcours complet est A,B,C,D. Mettre D devant C transformerait la règle FIFO.

Exercice 4 · Justifier#

Contester un tri automatique

La racine vaut 5, son enfant gauche 9 et son enfant droit 2. Le parcours infixe est-il croissant ? Que manque-t-il ?

Indice 1

Écrivez gauche, racine, droite.

Indice 2

La propriété de recherche est-elle respectée ?

Comprendre la correction

Le parcours donne 9,5,2, donc il n’est pas croissant. Cet arbre binaire ne respecte pas la propriété d’ABR : une clé plus grande est placée à gauche et une plus petite à droite. Le tri vient de la combinaison de cette propriété et du parcours infixe.

Exercice 5 · Problème de synthèse#

Problème : comparer les quatre ordres

A a pour enfants B et C ; B a uniquement un enfant droit D ; C a un enfant gauche E. Écrivez les parcours préfixe, infixe, suffixe et largeur, gauche avant droite. Expliquez pourquoi préfixe et largeur divergent dès leur troisième visite.

Indice 1

Le préfixe finit le sous-arbre gauche avant de commencer le droit.

Indice 2

La largeur conserve les nœuds du niveau précédent en tête de file.

Comprendre la correction

Préfixe : A,B,D,C,E. Infixe : B,D,A,E,C. Suffixe : D,B,E,C,A. Largeur : A,B,C,D,E. Après B, le préfixe descend vers D ; la largeur traite C déjà en attente. Les deux résultats sont corrects pour des règles différentes, et aucune étiquette ne doit être perdue ou répétée.

Exercice 6 · Problème de synthèse#

Problème : évaluer un arbre d’expression

Une racine - possède à gauche une racine × portant 6 et 2, et à droite la feuille 5. Donnez préfixe et suffixe, puis évaluez le suffixe avec une pile. Pourquoi l’ordre de dépilement des opérandes compte-t-il pour la soustraction ?

Indice 1

Le suffixe traite les deux opérandes avant l’opération.

Indice 2

Le dernier opérande dépilé est celui de gauche.

Comprendre la correction

Préfixe : -,×,6,2,5. Suffixe : 6,2,×,5,-. La pile reçoit 6 et 2 puis leur produit 12 ; elle reçoit 5, puis calcule 12-5=7. On dépile d’abord l’opérande droit 5 puis le gauche 12. Les intervertir donnerait -7 : le traitement des opérations non commutatives doit respecter la structure de l’arbre.

Exercice 7 · Problème de synthèse#

Problème : une information insuffisante

Un arbre a pour parcours préfixe A,B,C. Construisez deux arbres binaires différents donnant cette séquence. Comparez leurs parcours infixes. Pourquoi la séquence préfixe seule ne suffit-elle pas à reconstruire toute la structure sans marqueurs de vide ?

Indice 1

Une chaîne entièrement à gauche et une chaîne entièrement à droite conviennent.

Indice 2

Les étiquettes ne disent pas de quel côté se trouve un enfant unique.

Comprendre la correction

Une chaîne gauche A-B-C donne l’infixe C,B,A. Une chaîne droite A-B-C donne A,B,C. Le préfixe est identique dans les deux cas, car chaque parent est écrit avant son unique enfant. Sans indications des sous-arbres absents ou autre information suffisante, les positions gauche-droite ne sont pas déterminées. Un format de sauvegarde doit donc conserver davantage que les seules visites.

Les erreurs qui méritent un détour

Visiter seulement les enfants immédiats avant de passer à la suite.
Chaque sous-arbre est parcouru intégralement selon la même règle.
Confondre profondeur et largeur.
La largeur utilise une file pour préserver les niveaux.

La fiche à garder

L’essentiel à retenir

  • Préfixe, infixe et suffixe diffèrent par la position de la racine.
  • La largeur visite niveau par niveau avec une file.
  • L’ordre infixe est trié seulement sous une propriété d’ABR appropriée.

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.