OCaml二叉树镜像

时间:2017-10-31 03:18:38

标签: ocaml binary-tree mirror

我正在为一个班级学习OCaml,并且被赋予计算二叉树的镜像的任务。我很困难,不知道怎么开始......

type btree = Empty | Node of int * btree * btree
;;

let mirror : btree -> btree
  = fun t -> (* Code *)

示例输入:

let tree1 = Node(1, Node(2, Node(3, Empty, Empty), Empty), Node(4, Empty, Empty))
;;

示例输出:

mirror tree1 = Node(1, Node(4, Empty, Empty), Node(2, Empty, Node(3, Empty, Empty)))
;;

1 个答案:

答案 0 :(得分:2)

使用match功能。

您可以match根据其类型定义的值结构。在您的示例中,使用btree构造函数或Empty的元组构造函数创建Node of int * btree * btree类型的值。你应该得到这样的东西:

...
match t with
| Node (num, lt, rt) -> (* do something to switch the subtrees, and mirror the subtrees themselves *)
| Empty -> (* do nothing *)
...

由于mirror函数的类型为btree -> btree,因此每个匹配案例都必须返回btree类型的有效值。

请参阅:http://ocaml.org/learn/tutorials/data_types_and_matching.html#Pattern-matching-on-datatypes