Parcourir et mesurer un arbre

Les parcours (préfixe, infixe, suffixe) et la hauteur

Trois façons de lire un arbre

Un parcours d'arbre visite tous les noeuds selon un ordre précis. Les trois parcours « en profondeur » les plus courants ne diffèrent que par la position où l'on traite la racine :

  • préfixe : racine, puis sous-arbre gauche, puis sous-arbre droit ;
  • infixe : sous-arbre gauche, puis racine, puis sous-arbre droit ;
  • suffixe : sous-arbre gauche, puis sous-arbre droit, puis racine.

Schéma : les trois parcours sur le même arbre

                    8
                  /   \
                 3     10
                / \       \
               1   6        14
                  / \      /
                 4   7    13

prefixe (racine, gauche, droite) : 8 3 1 6 4 7 10 14 13
infixe  (gauche, racine, droite) : 1 3 4 6 7 8 10 13 14   (toujours trié !)
suffixe (gauche, droite, racine) : 1 4 7 6 3 13 14 10 8

La hauteur d'un arbre

La hauteur d'un arbre est la longueur, en nombre de liens, du plus long chemin entre la racine et une feuille. Un arbre réduit à un seul noeud a une hauteur de 0, et un arbre vide a une hauteur conventionnelle de -1.

Sur l'arbre ci-dessus, le chemin le plus long va de 8 vers 4, 7 ou 13 (tous à la même profondeur) : par exemple 8 -> 3 -> 6 -> 4, soit 3 liens. La hauteur de cet arbre est donc 3.

Implémentation en Python

def prefixe(noeud, resultat):
    if noeud:
        resultat.append(noeud.valeur)
        prefixe(noeud.gauche, resultat)
        prefixe(noeud.droit, resultat)
    return resultat

def hauteur(noeud):
    if noeud is None:
        return -1
    return 1 + max(hauteur(noeud.gauche), hauteur(noeud.droit))

Piège classique

Ne mélange pas hauteur et nombre de noeuds : un arbre « en baguette » (chaque noeud n'a qu'un seul enfant) contenant 100 noeuds a une hauteur de 99, alors qu'un arbre bien équilibré de 100 noeuds a une hauteur d'environ 6 seulement (puisque 2 puissance 7 dépasse 100). C'est cette différence qui rend les arbres équilibrés si efficaces en pratique.