简体   繁体   中英

Converting a binary tree to a list using fold function in Ocaml

Given:

type 'a tree = Empty | Node of 'a * 'a tree * 'a tree

Use:

let rec tree_fold  f e t = match t with
 | Empty -> e
 | Node (x, l, r) -> f x (tree_fold  f e l) (tree_fold  f e r);;

to convert a binary tree to a list. Example.

let someTree = Node (1,Node(2,Node(3,Empty,Empty),Empty),Empty)

tree2list someTree gives [1;2;3] .

My attempt:

let tree2list  tr = match tr with
 | Empty -> Empty
 | Node (x,l,r) ->  (tree_fold (fun acc tree-> tree::acc) [] tr)

It gives the error:

This expression has type 'a list but an expression was expected of type 'b -> 'b .

I've been at this for hours and keep getting similar errors. Any help would be very appreciated, even just a small hint would be great.

Thanks.

function that you should pass to a tree_fold accepts three arguments, and you're passing a function that can take only two arguments. That's what compiler tries to say. Of course, ther're some other problems, but I hope tha you'll cope with them!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM