haskell二叉树路径函数

时间:2018-02-18 14:50:25

标签: function haskell path binary-tree

我正在尝试定义一个将返回所有列表的函数 通过给定二叉树的路径。 我已经定义了以下功能:

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价值? 谢谢

1 个答案:

答案 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)