【发布时间】:2014-01-14 11:12:50
【问题描述】:
我的树种是
type 'a tree = Tree of 'a * 'a tree list;;
我怎样才能得到这样的树的镜像?对我来说,拥有一个孩子的列表很困惑,因为我不知道如何单独访问每个孩子并在不丢失父母的情况下进行递归,知道吗?
编辑: 我一直在尝试,我认为我得到了解决方案:
let spec arbol =
match arbol with
Tree(a,[])-> Tree(a,[])
| Tree(a,l)-> Tree(a, List.rev (
let rec aux = function
Tree(a,[])::[]->Tree(a,[])::[]
| Tree(a,[])::l-> [Tree(a,[])]@(aux l)
| Tree(a,t)::[]-> [Tree(a, (List.rev (aux t)))]
| Tree(a,t)::l-> [Tree(a, (List.rev (aux t)))]@(aux l)
in aux l));;
我已经用这棵树试过了:
let p = Tree(1, [
Tree(2,[]);
Tree(3, [
Tree(6,[]);
Tree(7,[])
]);
Tree(4,[]);
Tree(5,[])
]);;
我得到了# spec p;;的结果
-: int tree = Tree (1, [
Tree (5,[]);
Tree (4,[]);
Tree (3,[
Tree(7,[]);
Tree(6,[])]);
Tree (2,[])
])
所以我猜我的功能按预期工作。如果不正确请告诉我
【问题讨论】: