informatique (MP2I/MPI) · Chapitre 10 · Exercice de TD
Le miroir
Arbres · niveau 2
Énoncé
Écrire miroir, prouver que , et déterminer le parcours infixe du miroir en fonction de celui de l'arbre.
Corrigé
(* Renvoie l'arbre symetrique de a. Complexite : Theta(n) en temps. *)
let rec miroir = function
| Vide -> Vide
| Noeud (g, e, d) -> Noeud (miroir d, e, miroir g) (* d et g ECHANGES *)
Démonstration (du fait que )
Par induction structurelle. Deux constructeurs, deux cas.
Cas . .
Cas .
qui vaut par hypothèse d'induction appliquée à et à .
Le parcours infixe est renversé : .
Démonstration
Induction structurelle. Le cas est immédiat. Pour :
l'avant-dernière égalité utilisant , démontré au chapitre chap:induction.
Vérification : sur l'arbre de l'exercice 10.1, et . Les deux listes sont bien l'inverse l'une de l'autre, et : vérifié.
Et les deux autres parcours ? Le préfixe du miroir n'est pas l'inverse du préfixe : c'est l'inverse du postfixe. En effet, préfixe visite racine-gauche-droite ; en renversant l'arbre puis la liste, on obtient gauche-droite-racine, qui est le postfixe. Symétriquement, . Seul l'infixe est stable par cette double symétrie, parce qu'il est le seul des trois à être symétrique dans sa définition.
À quoi cela sert. À obtenir gratuitement la variante décroissante de tout algorithme fondé sur l'infixe : parcourir un arbre binaire de recherche par ordre décroissant, c'est parcourir son miroir par ordre croissant — ou, plus économiquement, échanger les deux appels récursifs, ce qui coûte au lieu de .