遍历多路树

0xR*_*RyN 0 ocaml

我正在尝试遍历多路树,并像 List.map 那样映射它的值。

这是我的尝试

type 'a tree = Node of 'a * ('a tree list);;

let tree_map f t = 
  let rec aux acc tr =
    match tr with
    | Node(v, []) -> Node(f v, []) :: acc
    | Node(v, sub) -> let r = List.fold_left aux acc sub in Node(f v, r) :: acc
  in aux [] t
;;

let t = Node (1, [Node (2, [Node (1, [])]); 
                  Node (3, []);
                  Node (1, [Node (5, []); 
                            Node (2, [])])]);;
;;

let res = tree_map (succ) t;;
Run Code Online (Sandbox Code Playgroud)

我尝试了这个答案的建议。无法成功实施。

我的函数返回这个显然是不正确的

val res : int tree list =
  [Node (2,
    [Node (2,
      [Node (3, []); Node (6, []); Node (4, []); Node (3, [Node (2, [])])]);
     Node (4, []); Node (3, [Node (2, [])])])]
Run Code Online (Sandbox Code Playgroud)

有什么问题 ?

gle*_*nsl 6

参加聚会有点太晚了,但因为我已经完成了工作并向您展示了可以简化多少功能:

let rec tree_map f (Node (v, sub)) =
  Node(f v, List.map (tree_map f) sub)
Run Code Online (Sandbox Code Playgroud)