2013-10-24 43 views
-2

让我们在ocaml中定义一个类型树。OCaml - 遍历树

type 'a tree = 
T of 'a * 'a list;; 

我想在两个方面遍历该图:从叶(1)从根到叶(2)以root

你能帮助我吗?

+2

我认为你应该用''树目录'来代替''list'',因为现在写的东西根本不是树。 – Kakadu

+3

你应该自己做家庭作业,而不是将它们发布到计算器上。 – Thomash

回答

2
type 'a tree = T of 'a * 'a tree list 

let rec walk_downwards f = function 
    | T (elt, children) -> 
     f elt; 
     List.iter (walk_downwards f) children 

let rec walk_upwards f = function 
    | T (elt, children) -> 
     List.iter (walk_upwards f) children; 
     f elt 
+1

我认为这是无法解决的解决方案,因为元组的2ns元素是_tree_而不是_list_ – Kakadu

+0

是的,从原始版本复制它,但没有足够小心 - 修复。 – gsg

+0

它如何工作?也许你可以使用fold_left向我展示遍历树? – user2900510