Haskell traverse tree inorder предварительный заказ postorder - PullRequest
5 голосов
/ 16 марта 2011

У меня есть следующее определение данных на 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.

Ответы [ 2 ]

6 голосов
/ 16 марта 2011

Вы возвращаете Int из базового варианта, но [Int] из конструктивного варианта.Листья тоже должны быть списками.

5 голосов
/ 16 марта 2011

Ошибка:

preorder(Leaf n) = n

Должно быть:

preorder(Leaf n) = [n] 

И то же самое для inorder и postorder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...