2011-03-16 64 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] 

而同爲序和後序。