Haskell 编写函数以计算树的左脊椎
我需要一些帮助来弄清楚如何在Haskell中创建Haskell 编写函数以计算树的左脊椎,haskell,Haskell,我需要一些帮助来弄清楚如何在Haskell中创建leftSpine函数。 基本上,它应该将所有最左边的叶子放入一个列表中,但每当我运行代码时,我都会得到一个空列表。任何帮助都将不胜感激 这是我的密码 data Tree x = Leaf | Node (Tree x) x (Tree x) deriving Show leftSpine :: Tree x -> [x] leftSpine Leaf = [] leftSpine (Node lt x rt) = (leftSp
leftSpine
函数。
基本上,它应该将所有最左边的叶子放入一个列表中,但每当我运行代码时,我都会得到一个空列表。任何帮助都将不胜感激
这是我的密码
data Tree x = Leaf | Node (Tree x) x (Tree x)
deriving Show
leftSpine :: Tree x -> [x]
leftSpine Leaf = []
leftSpine (Node lt x rt) = (leftSpine lt)
这是我用来测试它的代码
leftSpine (Node (Node (Node Leaf 1 Leaf) 2 (Node Leaf 3 Leaf))
4
(Node (Node Leaf 5 Leaf) 6 (Node Leaf 7 Leaf)))
它应该等于[4,2,1]
,但它只是作为[]
出现
leftSpine :: Tree x -> [x]
leftSpine Leaf = []
leftSpine (Node lt x rt) = x:leftSpine lt
你实际上没有把任何东西列入清单。区别在于x:leftSpine lt
而不是leftSpine lt
你实际上没有把任何东西列入清单。不同之处在于
x:leftSpine lt
而不是leftSpine lt
您的代码清楚地表明结果总是空列表
第一种情况是叶子的左脊柱是空列表。好的,到目前为止
第二种情况是,节点的左脊椎正好是节点左子节点的左脊椎
因此,如果我们想找到树的左脊椎,我们只需继续追踪我们到达的节点的左子节点,知道答案与下一个左子节点的左脊椎完全相等。要么我们最终找到一片叶子,结果是空列表,要么树是无限的,我们根本不返回结果。您的代码中没有任何内容可以返回任何其他内容
编写此类递归函数的关键是找出基本情况(
Leaf
,此处)的答案,然后对于非基本情况(节点
,此处),您需要找出如何将子解决方案与本地信息相结合,以生成完整的解决方案
在这种情况下,
叶的左脊柱很容易,因为根本没有数据。那么,如何将节点lt x rt
中的信息与leftSpine lt
结合起来,以获得整个树的左脊椎?您的代码清楚地表明,结果总是空列表
第一种情况是叶子的左脊柱是空列表。好的,到目前为止
第二种情况是,节点的左脊椎正好是节点左子节点的左脊椎
因此,如果我们想找到树的左脊椎,我们只需继续追踪我们到达的节点的左子节点,知道答案与下一个左子节点的左脊椎完全相等。要么我们最终找到一片叶子,结果是空列表,要么树是无限的,我们根本不返回结果。您的代码中没有任何内容可以返回任何其他内容
编写此类递归函数的关键是找出基本情况(Leaf
,此处)的答案,然后对于非基本情况(节点
,此处),您需要找出如何将子解决方案与本地信息相结合,以生成完整的解决方案
在这种情况下,叶的左脊柱很容易,因为根本没有数据。那么,您如何将节点lt x rt
的信息与左脊椎lt
结合起来,以获得整个树的左脊椎?我不敢相信我看不到!!我做了更改,运行了代码,它工作得非常好。非常感谢!这发生在我们所有人身上。别担心,我真不敢相信我看不到!!我做了更改,运行了代码,它工作得非常好。非常感谢!这发生在我们所有人身上。别担心。