我正在尝试定义一个将返回所有列表的函数 通过给定二叉树的路径。 我已经定义了以下功能:
data BTree a = Leaf a | Node a (BTree a) (BTree a)
deriving (Show,Eq)
paths :: BTree a -> [[a]]
paths (Leaf a) = [[]]
paths (Node x left right) = map (x:) (paths left ++ paths right)
使用此功能,我有以下结果,例如:
[[5,4],[5,4],[5,3],[5,3]]
。但我应该得到输出[[5,4,1],[5,4,2],[5,3,3],[5,3,4]]
。
有谁知道为什么我没有得到第3价值?
谢谢
答案 0 :(得分:1)
您的BTree
类型为:
data BTree a = Leaf a | Node a (BTree a) (BTree a)
请注意,与列表不同,它永远不会为空:叶子和节点都包含a
类型的值。既然如此,如果paths
中的案例总是产生空列表,例如......
paths (Leaf a) = [[]]
......你必须抛弃价值观。你想要的是:
paths :: BTree a -> [[a]]
paths (Leaf a) = [[a]]
paths (Node x left right) = map (x:) (paths left ++ paths right)