Aller au contenu
Parcourir un arbreChapitre 8/12

Dans quel ordre visiter les nœuds ?

Un tableau ou une liste chaînée se parcourent dans un seul ordre naturel : du premier au dernier. Un arbre, lui, se divise : après la racine, on va à gauche ou à droite ? On finit tout un côté avant l'autre, ou on avance étage par étage ?

Parcourir un arbre, c'est visiter chacun de ses nœuds exactement une fois (pour l'afficher, le compter, chercher une valeur...). Il existe deux grandes familles de parcours :

  • le parcours en largeur : étage par étage, comme on lit un texte, ligne par ligne ;
  • les parcours en profondeur : on descend le plus loin possible dans un côté avant de passer à l'autre. Il y en a trois, préfixe, infixe et suffixe, qui diffèrent par le moment où on écrit le nœud.
DBEACF

Toutes les animations de ce chapitre utilisent cet arbre. Tu verras que les quatre parcours donnent quatre ordres différents.

Programme complet du cours structures de données (12 chapitres, gratuit)
  1. 1. Ranger des données dans la mémoire : La RAM est un gros tableau de cases numérotées de 0 à N - 1 : 8 milliards pour 8 Go. Impossible de tout relire pour trouver une donnée, d'où les structures de données : un ordre connu à l'avance et des règles pour y accéder. Interface et implémentation.
  2. 2. Le tableau : des cases côte à côte : Des cases contiguës numérotées : accès direct par l'indice en une seule étape, mais insérer ou supprimer au début oblige à tout décaler.
  3. 3. La liste chaînée : des maillons reliés : Des maillons éparpillés dans la mémoire, chacun connaît l'adresse du suivant : insérer ou supprimer revient à raccrocher une flèche, mais lire le 100e oblige à passer par les 99 premiers.
  4. 4. La pile : dernier arrivé, premier sorti : La pile d'assiettes : on pose en haut, on prend en haut. Empiler, dépiler, sommet, LIFO, et une pile en Python avec append et pop.
  5. 5. La file : premier arrivé, premier servi : La file d'attente : on arrive à la fin, on sort par le début. Enfiler, défiler, FIFO, la différence avec la pile, et une file en Python.
  6. 6. Devine la structure : Le retour d'Insta, Ctrl+Z, la file d'impression, la playlist « à suivre », le distributeur de Pez, la pile d'appels : reconnaître la structure cachée derrière des situations réelles.
  7. 7. Les arbres : ranger en hiérarchie : Arborescence de fichiers, arbre généalogique, tournoi : une racine, des nœuds, des feuilles. Vocabulaire, hauteur, taille et arbre binaire.
  8. 8. Parcourir un arbre : Visiter tous les nœuds d'un arbre, chacun une fois : le parcours en largeur (avec une file), et les parcours en profondeur préfixe, infixe et suffixe.
  9. 9. L'arbre binaire de recherche : Plus petit à gauche, plus grand à droite : chercher une valeur en éliminant la moitié de l'arbre à chaque comparaison, insérer, et pourquoi l'arbre doit rester équilibré.
  10. 10. Pile et file en programmation objet : Écrire les classes Pile et File, puis une file fabriquée avec deux piles : même interface, autre implémentation.
  11. 11. La liste chaînée en programmation objet : Les classes Maillon et ListeChainee : ajouter en tête, parcourir, compter, lire le k-ième, ajouter en queue, supprimer. Puis une pile implémentée par une liste chaînée.
  12. 12. Les arbres en programmation objet : La classe Noeud, la récursivité pour la taille et la hauteur, les parcours préfixe, infixe, suffixe et en largeur, puis l'insertion et la recherche dans un ABR.