TD8 1 Arbres binaires 2 Arbres binaires de recherche

publicité
Licence 3, semestre 5, 2010–2011
Programmation Fonctionnelle
TD8
1
Arbres binaires
On s’intéresse dans cet exercice aux différents parcours d’un arbre binaire. On suppose que ces arbres
sont définis à l’aide du type suivant :
type ’a arbre = F of ’a | N of ’a * ’a arbre * ’a arbre
Question 1. Écrire une fonction elements : ’a arbre -> ’a list qui renvoie la liste des éléments (aux
feuilles ou aux nœuds) d’un arbre.
Question 2. Écrire une fonction récursive feuilles : ’a arbre -> int qui renvoie le nombre de feuilles
dans un arbre.
Question 3. Écrire une fonction récursive noeuds : ’a arbre -> int qui renvoie le nombre de nœuds
dans un arbre.
Question 4. Écrire une fonction récursive profondeur : ’a arbre -> int qui renvoie la hauteur d’un
arbre.
Question 5. En supposant que le type ’a arbre soit abstrait (ou privé), définir un itérateur fold suffisamment générique pour permettre de définir les quatre fonctions précédentes.
2
Arbres binaires de recherche
On suppose maintenant que les arbres de type ’a arbre ont la propriété des arbres de recherche (cf.
cours).
type ’a rech = Vide | Noeud of ’a rech * ’a * ’a rech
Question 6. Écrire une fonction inclus : ’a rech -> ’a rech -> bool telle que inclus a b détermine
si les éléments de l’arbre a sont dans l’arbre b.
Question 7. Écrire une fonction decoupe : ’a -> ’a rech -> ’a rech * ’a rech qui partage un arbre
de recherche selon un élément x (supposé appartenir à l’arbre) en deux sous-arbres de recherche l et r tels
que tous les éléments de l sont plus petits que x et tous les éléments de r plus grands.
Question 8. En utilisant la fonction précédente, écrire une fonction union : ’a rech -> ’a rech -> ’a
rech qui réalise l’union de deux arbres de recherche.
1
Téléchargement