Я имею дело с общей установки дерева, которое определяется следующим образом:Как очистить функцию обхода уровня?
data Tree a = Node a [Tree a] deriving (Eq, Read, Show)
С помощью этой установки, я создал функцию, которая печатает узлы на определенном уровне дерева (корень уровень 0, немедленная дети корня - уровень 1 и т. д.). Это функция:
level :: Int -> Tree a -> [a]
level 0 (Node a _) = [a]
level n (Node _ subtrees) = concatMap (level (n - 1)) subtrees
Используя эту функцию в качестве основы, я создал вторую функцию, levelorder, которая выводит список всех узлов в дереве в порядке обхода уровня. Эта функция в настоящее время выглядит следующим образом:
levelorder :: Tree a -> [a]
levelorder tree = level 0 tree ++ level 1 tree ++ level 2 tree ++ level 3 tree
В то время как это работает для дерева я в настоящее время работаю с, я хотел бы, чтобы очистить его туда, где он будет работать с деревом любого размера. Как вы можете видеть, в настоящее время он работает только с деревом с 4 уровнями (от 0 до 3). Как я мог бы достичь этого, где я все еще могу использовать функцию уровня как базу?