Tree handling

Stefan Karrmann sk@mathematik.uni-ulm.de
Tue, 27 Feb 2001 13:26:44 +0100


Martin Gustafsson schrieb folgendes am Mon, Feb 26, 2001 at 03:05:50PM +0100:
> Hello 
> 
> I'm a haskell newbie that tries to create a tree with arbitary numbers of childs. 
> I create the data structure but i can't do anything on it can someone please help
> me with a small function that sums the values of the leafs, so i donīt loose my hair
> so fast.
> 
> The datastructure looks like this and a binary tree built with it would look like this:
> 
> 
> data GeneralTree  = Nil | Node (Integer,[GeneralTree])

treeSum Nil = 0
treeSum Node (s, subtrees) = s + sum (map treeSum subtrees)
 
More general you may define
data GTree a = Nil | Node a [Gtree a]

accumTree : (a -> b -> b) -> b -> Gtree a -> b
accumTree f init Nil = init
accumTree f init Node x ts = let rs = map accumTree f init ts
                                 r = foldl f init rs
				 in foldl f init [x, r]

sumTree = accumTree + 0 

Best regards
-- 
Stefan Karrmann

You can't push on a rope.