OCaml二叉树镜像

OCaml二叉树镜像,ocaml,binary-tree,mirror,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)) ;; 样本

我正在为一个班学习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)))
;;

使用
匹配功能

您可以根据值的类型对其结构进行匹配。在您的示例中,使用int*btree*btree
空构造函数或
节点的元组构造函数创建
btree
类型的值。你应该以这样的方式结束:

。。。
匹配
|节点(num、lt、rt)->(*执行一些操作以切换子树,并镜像子树本身*)
|空->(*不执行任何操作*)
...
而且由于
mirror
函数的类型为
btree->btree
,因此每个匹配案例都必须返回类型为
btree
的有效值


请参阅:

使用
匹配功能

您可以根据值的类型对其结构进行匹配。在您的示例中,使用int*btree*btree
空构造函数或
节点的元组构造函数创建
btree
类型的值。你应该以这样的方式结束:

。。。
匹配
|节点(num、lt、rt)->(*执行一些操作以切换子树,并镜像子树本身*)
|空->(*不执行任何操作*)
...
而且由于
mirror
函数的类型为
btree->btree
,因此每个匹配案例都必须返回类型为
btree
的有效值


请参阅:

从一个简单的问题开始:镜像节点的代码是什么(1,空,空)?节点(1,节点(2,空,空),空)?然后概括(见下面金的答案)。发布您的试用-然后您将有更多的机会获得帮助。通常在ML中,您会使用模式匹配,但有趣的是您(或您的讲师)如何给出类似的示例。从简单的事情开始:镜像节点的代码可能是什么(1,空,空)?节点(1,节点(2,空,空),空)?然后概括(见下面金的答案)。发布你的试验-然后你将有更多的机会获得帮助。通常在ML中,你会使用模式匹配,但有趣的是,你(或你的导师)是如何给出类似的样本的。