当前位置: 首页 > 知识库问答 >
问题:

Haskell-从根到叶的列表

程卓君
2023-03-14

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

我试着像这样编码

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上的路径。


共有1个答案

苏波涛
2023-03-14
匿名用户

这是因为您的路径提示=[[]]返回一个包含一个元素的列表:空列表。

因此,这意味着,例如,对于箱子提示4(箱子提示3提示),左侧的路径将返回一个[[]],并且您在该列表前面加上4,因此也将生成[4]

如果您将其更改为路径提示 = [] ,您就解决了问题,因为它不会产生元素:

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

 类似资料:
  • 我已经解决了很多与树相关的问题,但是,我仍然对树的一个特定方面(通常是递归)没有信心: 如何将值从叶传播到根? 例如,假设我们有一个二叉树,其中我们必须找到具有最小和的根到叶路径。对于此处的树图像,总和将为7(对应于两条路径0-3-2-1-1或0-6-1)。 我编写了以下代码: 我知道最后一次返回的货币不正确,但是我应该返回什么?从技术上讲,我只想在到达叶节点时返回minVal的值(在中间节点时没

  • 问题内容: 我想获得有关分层查询(Oracle 11gR2)的帮助。这些查询让我很难受… 实际上,这是2合1问题(需要2种不同的方法)。 我正在寻找一种方法来获取所有个人记录到词根的距离(而不是相反的)。我的数据在树状结构中: 从层次上讲,我的数据看起来像这样(但是我有多个独立的根,还有更多的层次): 在第一个方法中,我正在寻找一个查询,该查询将给我以下结果: 在这个结果中, “ NODE”列表示

  • 问题是:计算所有根到叶数的总和。例如:如果树是(1,2,3),1是根,2是左子,3是右子,两条路径:1- 这是我正确的递归解决方案。在助手方法中,返回总和: 但是当我在helper方法中添加作为参数时,我总是得到0。 我相信我对递归一定有一些误解。提前感谢您给我一些解释,为什么的值没有“转移”回方法中的。

  • 我有一棵看起来像上面的树,由一个链接结构表示: 我的目标是找到从根节点到叶节点的所有路径。 我的树遍历算法如下所示: 当我运行它时,我确信树正在按图所示构建。我已经测试过了。然而,我无法找出我的树遍历分割错误的原因。 我得到的输出是: 我已经在高度较小的树上测试了它,它是有效的。但是出于某种原因,它不适用于高度大于2的树。我认为这是树出了问题,我检查并打印了每个父级、左子级和右子级,它们打印出来如

  • 问题内容: 我试图使用Java在二叉树中打印所有根到叶的路径。 在主要方法中: 但是它给出了错误的输出。 给定的树: 预期产量: [5,1,3] [5、8、6] [5、8、9] 但是输出产生了: [5,1,3] [5、1、3、8、6] [5、1、3、8、6、9] 可以找出一个… 问题答案: 用以下方法调用递归方法: 传递时会发生什么(而不是在所有方法调用中使用单个对象,这意味着,当您返回原始调用者

  • 所以我有一个等式,它返回一个给定int的列表。我想把它放到另一个等式中,看看长度是1还是2,如果长度是1,则返回True,如果长度不是,则返回False。 这是我能得到的最接近的结果,但它抛出了错误