【问题标题】:Haskell- lists from root to leavesHaskell-从根到叶的列表
【发布时间】:2019-10-25 09:57:03
【问题描述】:

该代码假设返回从树的根到叶子的每条路径的列表,从左到右的顺序。具有一个子节点(一个Tip 和一个Bin)的节点不被视为叶节点。

我试着像这样写代码

paths :: Tree a -> [[a]]
paths Tip = [[]]
paths (Bin Tip x Tip) = [[x]]
paths (Bin left x right) = map (x:) (paths left ++ paths right)

但它似乎返回路径包含一个孩子的节点。这将导致Bin (Bin Tip 3 Tip) 4 Tip 上的[[4,3],[4]] 之类的路径。

【问题讨论】:

  • [] :: [a]所有列表类型的空列表,包括嵌套列表类型(其中a ~ [b])。

标签: haskell tree


【解决方案1】:

这是因为您的 paths Tip = [[]] 返回一个带有 one 元素的列表:一个空列表。

因此,这意味着对于Bin Tip 4 (Bin Tip 3 Tip),例如,paths left 将返回一个[[]],并且您在该列表前面加上4,因此[4] 也将被生成。

如果你把它改成paths Tip = [],你就解决了这个问题,因为它不会产生一个元素:

paths :: Tree a -> [[a]]
paths Tip = []
paths (Bin Tip x Tip) = [[x]]
paths (Bin left x right) = map (x:) (paths left ++ paths right)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多