type 'a tree = | Node of 'a * 'a tree * 'a tree | Leaf;; let empty = Leaf ;; let rec mem x = function | Leaf -> false | Node (key, left, right) -> key = x || (x < key && mem x left) || (x > key && mem x right) ;; (* insert function will ignore the key which has already existed *) let rec insert x = function | Leaf -> Node (x, Leaf, Leaf) | Node (k, left, right) as node-> if x < k then Node (k, insert x left, right) else if x > k then Node (k, left, insert x right) else node ;; let rec tree_of_list = function | [] -> empty | h::t -> insert h (tree_of_list t) ;; let rec insert x = function | Leaf -> Node (x, Leaf, Leaf) | Node (k, left, right) as node-> if x < k then Node (k, insert x left, right) else if x > k then Node (k, left, insert x right) else node ;; let my_tree = tree_of_list [2;3;4;1;7;6;4;8] ;; let rec in_order_walk = function | Leaf -> () | Node (k,left,right) -> in_order_walk left; let () = print_int k in print_newline (); in_order_walk right;; let rec pre_order_walk = function | Leaf -> () | Node (k, left, right) -> let () = print_int k in print_newline (); pre_order_walk left; pre_order_walk right ;; let rec post_order_walk = function | Leaf -> () | Node (k, left, right) -> post_order_walk left; post_order_walk right; let () = print_int k in print_newline () ;; let rec height = function | Leaf -> 0 | Node (k, left, right) -> 1 + max (height left) (height right) ;;
No comments:
Post a Comment