Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. open Printf;;
  2.  
  3. type 'a tree=Nill | BST of 'a tree * 'a * 'a tree;;
  4.  
  5. let rec insert x bts =match bts with
  6. | Nill -> BST (Nill,x,Nill)
  7. | BST (left,n,right) -> if x>n then BST(left,n,insert x right)
  8. else if x<n then BST(insert x left,n,right)
  9. else BST(left,x ,right);;
  10. let insert_from_list l=
  11. List.fold_left (fun bst x -> insert x bst) Nill l;;
  12.  
  13. let bst1=insert_from_list [7;3;9;1;4;];;
  14.  
  15. let rec inorder =function
  16. | Nill -> printf "\n"
  17. | BST(left,node,right) -> inorder left ; printf "%d " node; inorder right;;
  18.  
  19. inorder bst1;;
  20.  
  21. let print_level x bst=
  22. let rec print_level_aux x count bst = match bst with
  23. | Nill ->()
  24. | BST(l,n,r) -> if (count == x) then (printf "%d " n)
  25. else print_level_aux x (count+1) l;print_level_aux x (count+1 ) r in
  26. print_level_aux x 0 bst;;
  27.  
  28. print_level 1 bst1;;
  29.  
  30. let rec h1 = function
  31. | Nill->0
  32. |BST(l,n,r) ->1+ max (h1 l) (h1 r);;
  33.  
  34.  
  35. let print_levels bst=
  36. let rec print_levels_aux bst level h=
  37. if level < h then (printf "\n L %d :" level ;print_level level bst ; print_levels_aux bst (level+1) h)
  38. else () in
  39. print_levels_aux bst 0 (h1 bst);;
  40.  
  41. print_levels bst1;;
  42.  
  43. let list_from_level l bst =
  44. let rec func_aux lvl bst l count = match bst with
  45. |Nill -> l
  46. | BST(left,x,right) -> if(lvl == count) then x::l
  47. else func_aux lvl left l (count+1) ;func_aux lvl right l (count+1) in
  48. func_aux l bst [] 0;;
  49.  
  50.  
  51. List.iter (fun x-> printf "%d" x) (list_from_level 2 bst1);;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement