Arbres.ml 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. type 'a arbre1 =
  2. | Vide
  3. | N of 'a * 'a arbre1 * 'a arbre1
  4. ;;
  5. let test1 = N(2,N(1,Vide, Vide), N(4,N(6,Vide,Vide), Vide));;
  6. let rec nb_sommet f = match f with
  7. | Vide -> 0
  8. | N(_,b,c) -> 1 + nb_sommet b + nb_sommet c
  9. ;;
  10. let rec nb_noeud f = match f with
  11. | Vide -> 0
  12. | N(n,Vide,Vide) -> 0
  13. | N(_,g,d) -> 1 + nb_noeud g + nb_noeud d
  14. ;;
  15. let rec nb_feuille f = match f with
  16. | Vide -> 0
  17. | N(n,Vide,Vide) -> 1
  18. | N(_,g,d) -> nb_feuille g + nb_feuille d
  19. ;;
  20. let rec hauteur f = match f with
  21. | Vide -> -1
  22. | N(n,a,b) -> if hauteur a > hauteur b then 1 + hauteur a
  23. else 1 + hauteur b
  24. ;;
  25. let rec etiquette f = match f with
  26. | Vide -> failwith "stop"
  27. | N(r,Vide,Vide) -> r
  28. | N(r,g,Vide)-> max r (etiquette g)
  29. | N(r,Vide,d) -> max r (etiquette d)
  30. | N(r,g,d) -> max r (max (etiquette g) (etiquette g))
  31. ;;
  32. (* Pas sur de celui au dessus *)
  33. let rec entier a = match a with
  34. | Vide -> true
  35. | N(_,Vide,Vide) -> true
  36. | N(_,g,Vide) ->false
  37. | N(_,Vide,d) ->false
  38. | N(_,g,d) ->entier g && entier d
  39. ;;
  40. type 'a arbre2 =
  41. | F of 'a
  42. | N of 'a * 'a arbre2 * 'a arbre2
  43. ;;
  44. let test2 = N(2,F(1),N(4,F(7), F(8)));;
  45. type ('f, 'n) arbre3 =
  46. | F of 'f
  47. | N of 'n * (('f, 'n) arbre3) * (('f,'n) arbre3)
  48. ;;
  49. let test3 = N((+), N(( * ), F 7, N((-), F 4, F 2)), N(( * ), F 3, F 1))
  50. type 'a arbre4 = N of 'a * ('a arbre4 list);;
  51. let test4 = N(2, [N(3,[N(5, [])]); N(6,[N(8, []); N(4,[])]); N(7,[])]);;
  52. let rec nb_sommet2 f = match f with
  53. | N(_,[]) -> 0
  54. | N(r,b::q) -> 1 + (nb_sommet2 b) + (nb_sommet2 (N(r,q)))
  55. ;;
  56. let rec hauteur2 f = match f with
  57. | N(_,[]) -> 0
  58. | N(r,b::q) -> max (1+ hauteur2 b) (1+hauteur2 (N(r,q)))
  59. ;;