【问题标题】:Ocaml, levels function for binary treeOcaml,二叉树的级别函数
【发布时间】:2018-11-12 09:51:32
【问题描述】:

我想为二叉树实现层次函数,它将二叉树转换为列表列表 int,并且每个列表 int 需要包含当前级别的所有值: 例如:

              9
         6          10
     5     7              11
 42   
 42
 42

[[9];[6;10];[5;7;11];[42];[42];[42]]

我需要使用这种类型和 fold_bin_tree

type 'a bin_tree =
   Node of 'a bin_tree * 'a * 'a bin_tree | Null;;


let rec fold_bin_tree f a t =
  match t with
  Null ->a |
  Node (l,x,r) ->f x (fold_bin_tree f a l) (fold_bin_tree f a r);;

我已经实现了合并功能作为助手,这就是我的代码:

let merge l1 l2 = (*[[a b c] [d e]] merge [[1] [2 3] [4]] = 
[[a b c 1] [d e 2 3] [4]]*)
let rec scan l1 l2 acc =
  match l1,l2 with
  | [],[] -> acc
  | h1::t1,[] -> scan t1 l2 (h1::acc)
  | [], h2::t2 -> scan l1 t2 (h2::acc)
  | h1::t1,h2::t2 -> scan t1 t2 ((h1@h2)::acc)
  in scan l1 l2 [];;

let levels t =
  fold_bin_tree
  (fun x levels_l levels_r -> let lev = merge levels_l levels_r in
    [x]::lev
  ) [] t;;

我已经测试过合并,它似乎运行良好,但我的关卡无法正常运行,因为

levels example

返回 [[9];[5;7];[42];[42];[42;11];[6;10]]

例子是我在文章开头展示的那棵树

  let example = Node(  Node(Node(Node(Node(Node(Null,42,Null),42,Null),42,Null),5,Null), 6 ,Node( Null, 7 ,Null )) ,9, (Node(Null, 10 ,Node(Null,11,Null))));;

【问题讨论】:

    标签: ocaml binary-tree


    【解决方案1】:

    提示:为什么你的函数 merge 返回

     merge [[1];[2]] [];;
    

    [[2]; [1]]

    ?

    【讨论】:

    • 天哪!我忘记了我应该修改我的结果,因为我从左到右检查元素。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多