rooq37

Złe rzeczy

Nov 27th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. module Tree =
  2. struct
  3. type 'a t = Tip | Node of 'a * 'a t * 'a t
  4. type 'a llist = LNil | LCons of 'a * (unit -> 'a llist);;
  5.  
  6.  
  7. let create = Tip;;
  8.  
  9. let rec insert tree (value) =
  10. match tree with
  11. | Tip -> Node(value, Tip, Tip)
  12. | Node(info,t1,t2) ->
  13. if(value<=info) then Node(info,insert t1(value),t2)
  14. else Node(info,t1,insert t2(value)
  15. )
  16. ;;
  17.  
  18. let rec find tree (key) =
  19. match tree with
  20. | Node(value,t1,t2) ->
  21. if(key = value) then true
  22. else (if key<value then find t1 (key) else find t2 (key))
  23. | Tip -> false
  24. ;;
  25.  
  26. let rec getPreOrder tree =
  27. match tree with
  28. | Tip -> []
  29. | Node(value,t1,t2) -> value::getPreOrder t1@getPreOrder t2
  30. ;;
  31.  
  32. let rec getPostOrder tree =
  33. match tree with
  34. | Tip -> []
  35. | Node(value,t1,t2) -> List.rev(value::List.rev(getPostOrder t1@getPostOrder t2))
  36. ;;
  37.  
  38. let rec getInOrder tree =
  39. match tree with
  40. | Tip -> []
  41. | Node(value,t1,t2) -> getInOrder t1@(value::getInOrder t2)
  42. ;;
  43.  
  44. let rec deletemin tree =
  45. match tree with
  46. Node(value,Tip,t2) -> (value,t2)
  47. | Node(value,t1,t2) ->
  48. let (value,l) = deletemin t1
  49. in (value,Node(value,l,t2))
  50. | Tip -> failwith "error"
  51. ;;
  52.  
  53. let rec delete tree key =
  54. match tree with
  55. Tip -> Tip
  56. | Node(value,t1,t2) ->
  57. if(key > value) then Node(value, delete t1 key, t2)
  58. else if(key = value) then
  59. ( match (t1, t2) with
  60. (Tip, t2) -> t2
  61. | (t1, Tip) -> t1
  62. | _ -> let (value,t_right) = deletemin t2 in Node(value,t1,t_right)
  63. )
  64. else Node(value, t1, delete t2 key)
  65. ;;
  66.  
  67.  
  68. end;;
  69.  
  70. let s1 = let open Tree in create;;
  71. let s2 = Tree.insert s1 (5)
  72. let s3 = Tree.insert s2 (3)
  73. let s4 = Tree.insert s3 (1)
  74. let s5 = Tree.insert s4 (4)
  75. let s6 = Tree.insert s5 (7)
  76.  
  77. Tree.getPreOrder s6
  78. Tree.getPostOrder s6
  79. Tree.getInOrder s6
  80. Tree.find s3 (3)
  81. let s7 = Tree.delete s6 5
  82. Tree.getPreOrder s7
Advertisement
Add Comment
Please, Sign In to add comment