NSI (terminale) · Chapitre 3 · Application directe du cours
Problème — Affichage indenté et statistiques d'un arbre
Les arbres · niveau 2
Énoncé
Problème — Affichage indenté et statistiques d'un arbre.
On souhaite afficher un arbre binaire sous forme indentée (chaque niveau décalé de quelques espaces) et calculer simultanément sa taille, sa hauteur et son nombre de feuilles. Écrire les fonctions correspondantes et les tester sur un exemple.
Corrigé
Pour l'affichage indenté, on effectue un parcours en profondeur en passant un paramètre de profondeur qui détermine le décalage. On choisit d'afficher le sous-arbre droit en premier, ce qui donne, en tournant la tête, une représentation visuelle de l'arbre couché.
def afficher(arbre, profondeur=0):
if arbre is None:
return
afficher(arbre.droit, profondeur + 1)
print(" " * profondeur + str(arbre.valeur))
afficher(arbre.gauche, profondeur + 1)
def statistiques(arbre):
if arbre is None:
return (0, -1, 0) # (taille, hauteur, feuilles)
if arbre.gauche is None and arbre.droit is None:
return (1, 0, 1) # feuille
tg, hg, fg = statistiques(arbre.gauche)
td, hd, fd = statistiques(arbre.droit)
taille = 1 + tg + td
hauteur = 1 + max(hg, hd)
feuilles = fg + fd
return (taille, hauteur, feuilles)
# Test :
racine = None
for v in [8, 3, 10, 1, 6, 14]:
racine = inserer(racine, v)
afficher(racine)
print(statistiques(racine)) # (6, 2, 3)
La fonction statistiques calcule les trois grandeurs en un seul parcours , en combinant les résultats des sous-arbres. On évite ainsi de parcourir l'arbre trois fois séparément.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 8 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.