Haskell遍历树顺序预订后序

时间:2011-03-16 19:27:26

标签: haskell tree

我有以下Haskell数据定义:

data Tree = Leaf Int | Node Int Tree Tree deriving Show

我编写了以下程序来遍历树木预订,订单和后序:

preorder(Leaf n) = n
preorder(Node n t0 t1) = [n] ++ preorder t0 ++ preorder t1

inorder(Leaf n) = n
inorder(Node n t0 t1) = inorder t0 ++ [n] ++ inorder t1

postorder(Leaf n) = n
postorder(Node n t0 t1) = postorder t0 ++ postorder t1 ++ [n]

我得到的错误是:

- Type error in application  
*** Expression     : preorder t0 ++ preorder t1  
*** Term           : preorder t1  
*** Type           : Int  
*** Does not match : [a]  

我需要以适当的顺序返回包含所有树整数的列表。任何帮助都非常受欢迎,因为我是Haskell的新手。

3 个答案:

答案 0 :(得分:6)

您从基本案例返回Int,但从建设性案例中返回[Int]。树叶也应该是列表。

答案 1 :(得分:5)

错误是:

preorder(Leaf n) = n

应该是:

preorder(Leaf n) = [n] 

对于顺序和后序也一样。

答案 2 :(得分:2)

更改功能可以解决该错误,但是您只能成对插入Tree中。

最好将其更改为:

data Tree = Leaf | Branch Int Tree Tree deriving Show

inorder Leaf = []
inorder (Branch n left right) = inorder left ++ [n] ++ inorder right
-- etc.

用于检查以不同语言实现算法的好页面是Rosetta Code,它在Tree traversals上有一个页面,其中包括Haskell。