[Haskell-cafe] Leaves of a Tree

Donald Bruce Stewart dons at cse.unsw.edu.au
Wed Feb 21 17:58:00 EST 2007


tomahawkins:
> Hello,
> 
> Any recommendations for speeding up extracting the set of leaves from a 
> tree?
> 
> data Tree = Branch Tree Tree | Leaf Int deriving (Eq, Ord)
> 
> My slow, naive function:
> 
> leaves :: Tree -> Set Int
> leaves (Leaf n) = singleton n
> leaves (Branch left right) = union (leaves left) (leaves right)
> 
> In my case, many of the branches in the tree are the same.  I suspect
> the fixed point operation mentioned in the thread "speeding up
> fibonacci with memoizing" is applicable, but I'm having a tough time
> making the connection.

Also, just check the strictness on the traversal function. 

A slightly different tree here might give some hints,

    http://shootout.alioth.debian.org/gp4/benchmark.php?test=binarytrees&lang=ghc&id=3

-- Don


More information about the Haskell-Cafe mailing list