List 如何返回树&x27;s在Haskell的列表中留下
到目前为止,我有以下代码:List 如何返回树&x27;s在Haskell的列表中留下,list,haskell,tree,binary-tree,List,Haskell,Tree,Binary Tree,到目前为止,我有以下代码: data BinaryTree a = Null | Node a (BinaryTree a) (BinaryTree a) treeLeaves :: BinaryTree a -> [a] treeLeaves tree = case tree of Null -> [] Node v t1 t2 -> [] ++ treeLeaves t1 ++ treeLeaves t2 我不确定我做错了什么。它输出一
data BinaryTree a = Null | Node a (BinaryTree a) (BinaryTree a)
treeLeaves :: BinaryTree a -> [a]
treeLeaves tree = case tree of
Null -> []
Node v t1 t2 -> [] ++ treeLeaves t1 ++ treeLeaves t2
我不确定我做错了什么。它输出一个空列表。现在,您缺少一个重要步骤,即将叶子添加到列表中,这就是为什么您总是得到一个空列表。此
[]++treeLeaves t1++treeLeaves t2
最终将落在Null
分支中,并成为[]+[]++…++[]
正如泽塔所评论的那样
当BinaryTree
为Node v Null Null
时,您就知道已经到达了一个叶子。因此,您也需要为这种情况编写一个分支:
treeLeaves :: BinaryTree a -> [a]
treeLeaves tree = case tree of
Null -> []
Node v Null Null -> v:[]
Node _ t1 t2 -> treeLeaves t1 ++ treeLeaves t2
正如Igor所评论的,您可以在最后一行使用
\uu
而不是v
,因为您没有在该节点中使用元素(因为它不是叶) 现在你错过了重要的一步,那就是将叶子添加到列表中,这就是为什么你总是得到一个空列表。此[]++treeLeaves t1++treeLeaves t2
最终将落在Null
分支中,并成为[]+[]++…++[]
正如泽塔所评论的那样
当BinaryTree
为Node v Null Null
时,您就知道已经到达了一个叶子。因此,您也需要为这种情况编写一个分支:
treeLeaves :: BinaryTree a -> [a]
treeLeaves tree = case tree of
Null -> []
Node v Null Null -> v:[]
Node _ t1 t2 -> treeLeaves t1 ++ treeLeaves t2
正如Igor所评论的,您可以在最后一行使用
\uu
而不是v
,因为您没有在该节点中使用元素(因为它不是叶) 在用Haskell写这篇文章之前,请先解释一下你自己会怎么做?您希望程序采取什么步骤返回叶子?[]++x++y
是x++y
。在什么时候treeLeaves
将返回除[]
之外的其他内容?v
节点v t1 t2中的v参数未在实现中使用。嗯,也许我们可以用它做点什么,或者用\uuuu
来代替,不要分心…在用Haskell写之前,请先解释一下你自己会怎么做?您希望程序采取什么步骤返回叶子?[]++x++y
是x++y
。在什么时候treeLeaves
将返回除[]
之外的其他内容?v
节点v t1 t2
中的v参数未在实现中使用。嗯,也许我们可以用它做点什么,或者使用\uuuu
来避免分心。。。