0
Это мой СНИМИТЕ:Распечатайте бинарное дерево
data BinTree α = Empty
| Node (BinTree α) α (BinTree α)
deriving (Eq, Show)
Теперь я хочу, чтобы создать функцию:
levels :: BinTree a -> [[a]]
Это должно распечатать бинарное дерево в списке, но каждый уровень свой. Для примера: [[1],[2,3],[4,5,6,7]]
или
[1]
[2,3]
[4,5,6,7]
...
Я определил roots
и childs
:
roots ts = [ a | Node _ a _ <- ts ]
childs ts = [ t | Node l _ r <- ts, t <- [l, r] ]
и траверс функцию, которая получает список поддерева и его узла.
traverse' :: [BinTree α] -> [α]
traverse' [] = []
traverse' ts = roots ts ++ traverse' (childs ts)
levels :: BinTree α -> [α]
levels t = traverse [t]
Но это не то, что я действительно хотел. У кого-то есть идея.
Попробуйте написать 'f :: BinTree a -> [[a]]', который преобразует двоичное дерево в список списков, в котором первый список содержит корень, второй список - дочерние, следующий - внуки и так далее. После этого ты почти закончил. – ThreeFx
В противном случае посмотрите на [this] (http://stackoverflow.com/questions/12556469/nicely-printing-showing-a-binary-tree-in-haskell?rq=1) вопрос, это может помочь в разработке функция. – ThreeFx
Подумайте о том, как выразить уровни узла в терминах уровней левого и правого дочерних узлов. Вы знакомы с функцией 'zip'? – ErikR