2011-03-16 62 views
4

我有以下的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] 

我需要返回一个列表,其中包含适当的所有树整数或DER。任何帮助都非常感谢,因为我是Haskell的新手。

回答

6

您从基础案例中返回Int,但从建设性案例中返回[Int]。叶子也应该是名单。

+0

我编辑的问题,使其更清晰。我需要从树中返回一个包含所有整数的列表。你能详细说明一下吗? – Adriana 2011-03-16 19:33:46

+1

我想弄清楚这是否是家庭作业。但是:你在递归案例中使用'[n]'。那么你认为你应该在基本案例中使用什么? – geekosaur 2011-03-16 19:34:38

+0

这是学习。我在下面详细说明。谢谢。 – Adriana 2011-03-16 19:40:18

5

的错误是:

preorder(Leaf n) = n 

应该是:

preorder(Leaf n) = [n] 

而同为序和后序。