C5 : Exercices
■ Arbres binaires
C5.E1 : Arbre représentant une expression arithmétique
Considérons l'arbre suivant :
1) Quelle est la particularité des nœuds qui sont des feuilles et des nœuds qui ne sont pas des feuilles ?
2) Écrire l'implémentation en python à base de tuples imbriqués de cet arbre.
3) Écrire une fonction récursive affiche(arb_expr) qui prend un arbre correspondant à une expression arithmétique en paramètre et renvoie une chaine de caractère contenant l'expression avec les parenthèses. Ainsi, la fonction affiche appliquée à l'arbre précédent doit renvoyer ((35 + 12) × (6 - 8)).
4) Écrire une fonction récursive calcul(arb_expr) qui prend un arbre correspondant à une expression arithmétique en paramètre et renvoie la valeur calculée de cette expression. Ainsi, la fonction calcul appliquée à l'arbre précédent doit renvoyer -94.
C5.E2 : Analyse d'une fonction
A faire sans l'ordinateur
On considère des arbres binaires dont les valeurs sont des nombres entiers, implémentés à l'aide de tuples imbriqués (avec None si l'arbre est vide).
On s'intéresse à la fonction dont le code est donné ci-dessous.
def est_dans(arb, val):
if arb == None :
return False
else:
return arb[0] == val or est_dans(arb[1], val) or est_dans(arb[2], val)
1) Expliquer le mécanisme de cette fonction.
2) Écrire la docstring de cette fonction.
3) On propose une deuxième version de la fonction ci-dessous :
def est_dans(arb, val):
if arb == None :
return False
elif arb[0] == val:
return True
else:
return est_dans(arb[1], val) or est_dans(arb[2], val)
Indiquer, en justifiant votre réponse, la version qui vous semble la plus optimale.
C5.E3 : Arbre binaire strict (ou localement complet)
Un arbre binaire strict ou localement complet est un arbre dont tous les nœuds possèdent zéro ou deux fils.
1) Parmi les arbres ci-dessous lesquels sont localement complets ?
2) En travaillant avec une implémentation des arbres binaires à l'aide de tuples imbriqués (avec None si l'arbre est vide), écrire une fonction prédicat (c'est-à-dire qui renvoie True ou False) qui permet de tester si un arbre binaire passé en paramètre est localement complet.
■ Arbres binaires de recherche
C5.E11 : Quelques arbres
Représenter tous les ABR contenant les entiers 3, 5 et 7.
C5.E12 : Plus petite valeur dans un ABR
1) Où se trouve la plus petite valeur dans un ABR ?
2) En travaillant avec une implémentation des arbres binaires à l'aide de tuples imbriqués (avec None si l'arbre est vide), écrire une fonction qui prend un ABR en paramètre et renvoie sa plus petite valeur.
C5.E13 : Tri d'une liste à l'aide des ABR
Dans cet exercice, on travaillera avec une implémentation des arbres binaires à l'aide de tuples imbriqués (avec None si l'arbre est vide)
1) Écrire une fonction qui prend un ABR en paramètre et renvoie la liste des clés de cet arbre dans l'ordre infixe. Quel est la particularité de la liste renvoyée ?
2) Écrire une fonction qui :
- - prend un ABR et une valeur en paramètre ;
- - renvoie un ABR correspondant à celui passé en paramètre, dans lequel la valeur a été ajoutée.
3) Écrire une fonction qui prend une liste en paramètre et renvoie une liste triée contenant les mêmes valeurs.