将树缩减为haskell中的列表

Joh*_*ohn 2 haskell

我正在尝试将树减少到列表,但我被困在这里..任何建议都赞赏..

data Tree a = Leaf a | Node (Tree a) a (Tree a) deriving (Eq, Show)
treeToList :: (Ord a) => Tree a -> [a]
treeToList (Node root left right) = treeToList left ++ [root] ++   treeToList right
Run Code Online (Sandbox Code Playgroud)

期待结果:

ghci> treeToList (Node (Leaf 1) 2 (Node (Leaf 3) 4 (Leaf 5)))

[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

m0n*_*awk 6

你有两个错误:

  1. 非详尽模式(用于Leaf构造函数).
  2. 并且在Node您匹配的模式中,root左侧树值(Tree a)而不是a.

因此结果应如下所示:

data Tree a = Leaf a | Node (Tree a) a (Tree a) deriving (Eq, Show)

treeToList :: (Ord a) => Tree a -> [a]
treeToList (Leaf v) = [v]
treeToList (Node left root right) = treeToList left ++ [root] ++ treeToList right
Run Code Online (Sandbox Code Playgroud)
*Main> treeToList (Node (Leaf 1) 2 (Node (Leaf 3) 4 (Leaf 5)))
[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)