二分木を作ってみる
そういえば、二分木を探索するコードは書いたことがあったけど、二分木を作るコードは書いた記憶がなかったなぁ、と思いやってみることにしました。
いつもはWebの情報とかを参考にしがちなんだけど、脳に汗を書かせたい気分なので自力で頑張るぞ、と。
type 'a t = Lf | Br of 'a * 'a t * 'a t let rec set v = function | Lf -> Br(v, Lf, Lf) | Br(orig, left, right) -> if v < orig then Br(orig, (set v left), right) else Br(orig, left, (set v right)) let _ = let sample = [5; 2; 7; 1; 8; 3; 6; 4] in List.fold_left (fun t i -> set i t) Lf sample
お、なんかすっきりかけた。二分木をダンプするコード書くのめんどいので…
mitsu@garlic$ ocaml Objective Caml version 3.10.2 # #use "tree.ml";; type 'a t = Lf | Br of 'a * 'a t * 'a t val set : 'a -> 'a t -> 'a t = <fun> - : int t = Br (5, Br (2, Br (1, Lf, Lf), Br (3, Lf, Br (4, Lf, Lf))), Br (7, Br (6, Lf, Lf), Br (8, Lf, Lf))) #
それらしく出来てる!やったぁ。