foldrNaryTree :: b -> (a -> [b] -> b) -> NaryTree a -> b foldrNaryTree leaf node Leaf = leaf foldrNaryTree leaf node (Node a nodes) = node ((\x -> x) a) (map (foldrNaryTree leaf node) nodes)
Alle Knoten im Baum kann man dann zählen mit
countNaryTree = foldrNaryTree 0 (\x xs -> 1 + sum xs)
Zum Beispiel:
tree1 = Node "top" [Node "below-top1" [], Node "below-top2" []] ct1 = countNaryTree tree1 -- 3
Die folgende Funktion wandelt einen Baum in eine Liste um:
flattenNaryTree = foldrNaryTree [] (\x xs -> x:(concat xs))