OCaml二叉树镜像
我正在为一个班学习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)) ;; 样本
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中,你会使用模式匹配,但有趣的是,你(或你的导师)是如何给出类似的样本的。