0
これが私のGuidlineです:印刷アウトバイナリツリーを
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]
Iは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]]'を書いてみてください。最初のリストにはルートが含まれ、2番目のリストには子孫、次の孫等々。それ以降はほぼ完了です。 – ThreeFx
それ以外の場合は[this](http://stackoverflow.com/questions/12556469/nicely-printing-showing-a-binary-tree-in-haskell?rq=1)の質問をご覧ください。関数。 – ThreeFx
左と右の子ノードのレベルに関してノードのレベルを表現する方法について考えてみましょう。 'zip'関数について紹介しましたか? – ErikR