99 questions/Solutions/61A: Difference between revisions

From HaskellWiki
Wapcaplet (talk | contribs)
No edit summary
 
No edit summary
Line 8: Line 8:
leaves (Branch a Empty Empty) = [a]
leaves (Branch a Empty Empty) = [a]
leaves (Branch a left  right) = leaves left ++ leaves right
leaves (Branch a left  right) = leaves left ++ leaves right
</haskell>
Alternative solution only using cons:
<haskell>
leaves t = leaves' t []
    where leaves'  Empty                xs = xs
          leaves' (Branch x Empty Empty) xs = x:xs
          leaves' (Branch _ l r)        xs = leaves' l $ leaves' r xs
</haskell>
</haskell>

Revision as of 13:02, 1 August 2012

Collect the leaves of a binary tree in a list

A leaf is a node with no successors. Write a predicate leaves/2 to collect them in a list.

leaves :: Tree a -> [a]
leaves  Empty                 = []
leaves (Branch a Empty Empty) = [a]
leaves (Branch a left  right) = leaves left ++ leaves right

Alternative solution only using cons:

leaves t = leaves' t []
    where leaves'  Empty                 xs = xs
          leaves' (Branch x Empty Empty) xs = x:xs
          leaves' (Branch _ l r)         xs = leaves' l $ leaves' r xs