Vérifier qu'un arbre est un ABR
Exercice de TD · niveau 3 (difficile) · NSI (terminale), chapitre 3 — Les arbres
Énoncé
Vérifier qu'un arbre est un ABR.
Écrire une fonction est_abr(arbre) qui renvoie True si un arbre binaire respecte la propriété d'ABR.
Corrigé
Il ne suffit pas de comparer chaque nœud à ses enfants directs : il faut que toutes les valeurs d'un sous-arbre respectent un intervalle autorisé. On transmet donc une borne minimale et une borne maximale, resserrées à chaque descente.
def est_abr(arbre, mini=float('-inf'), maxi=float('inf')):
if arbre is None:
return True
if not (mini < arbre.valeur < maxi):
return False
return (est_abr(arbre.gauche, mini, arbre.valeur)
and est_abr(arbre.droit, arbre.valeur, maxi))
En descendant à gauche, la valeur du nœud devient la nouvelle borne maximale ; en descendant à droite, elle devient la nouvelle borne minimale. Coût .
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.