Licence 3, semestre 5, 2010–2011 Programmation Fonctionnelle
TD8
1 Arbres binaires
On s’int´eresse dans cet exercice aux diff´erents parcours d’un arbre binaire. On suppose que ces arbres
sont d´efinis `a l’aide du type suivant :
type ’a arbre = F of ’a | N of ’a * ’a arbre * ’a arbre
Question 1. ´
Ecrire une fonction elements : ’a arbre -> ’a list qui renvoie la liste des ´el´ements (aux
feuilles ou aux nœuds) d’un arbre.
Question 2. ´
Ecrire une fonction r´ecursive feuilles : ’a arbre -> int qui renvoie le nombre de feuilles
dans un arbre.
Question 3. ´
Ecrire une fonction r´ecursive noeuds : ’a arbre -> int qui renvoie le nombre de nœuds
dans un arbre.
Question 4. ´
Ecrire une fonction r´ecursive profondeur : ’a arbre -> int qui renvoie la hauteur d’un
arbre.
Question 5. En supposant que le type ’a arbre soit abstrait (ou priv´e), d´efinir un it´erateur fold suffisam-
ment g´en´erique pour permettre de d´efinir les quatre fonctions pr´ec´edentes.
2 Arbres binaires de recherche
On suppose maintenant que les arbres de type ’a arbre ont la propri´et´e des arbres de recherche (cf.
cours).
type ’a rech = Vide | Noeud of ’a rech * ’a * ’a rech
Question 6. ´
Ecrire une fonction inclus : ’a rech -> ’a rech -> bool telle que inclus a b d´etermine
si les ´el´ements de l’arbre asont dans l’arbre b.
Question 7. ´
Ecrire une fonction decoupe : ’a -> ’a rech -> ’a rech * ’a rech qui partage un arbre
de recherche selon un ´el´ement x(suppos´e appartenir `a l’arbre) en deux sous-arbres de recherche let rtels
que tous les ´el´ements de lsont plus petits que xet tous les ´el´ements de rplus grands.
Question 8. En utilisant la fonction pr´ec´edente, ´ecrire une fonction union : ’a rech -> ’a rech -> ’a
rech qui r´ealise l’union de deux arbres de recherche.
1
1 / 1 100%