代码之家  ›  专栏  ›  技术社区  ›  Sean

OCaml二叉树镜像

  •  0
  • Sean  · 技术社区  · 8 年前

    我正在为一个班学习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 回复  |  直到 8 年前
        1
  •  2
  •   Jin    8 年前

    使用 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 ,每个匹配案例都必须返回类型为的有效值 B树 .

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