99 questions/Solutions/61A: Difference between revisions
< 99 questions | Solutions
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