【发布时间】:2020-01-10 07:48:46
【问题描述】:
我有
t1 = Node 'a' (Node 'c' (Node 'f' Empty Empty)
(Node 'd' Empty Empty))
(Node 'b' Empty
(Node 'e' Empty Empty))
data BTree = Empty | Node Char BTree BTree
我需要做的函数是genWords :: BTree -> [String]。
这是我目前得到的:
genWords :: BTree -> [String]
genWords Empty = []
genWords (Node ch Empty Empty) = [ch]
genWords (Node ch left right) = map (ch:) (genWords left ++ genWords right)
我知道我的错误是我使用字符并且我的函数需要返回一个字符串列表,但我不知道如何解决它。
【问题讨论】:
-
这里的预期输出到底是什么?
-
@Chi - 返回一个空字符串列表不是有点多余吗?我的意思是,我想这取决于您是否希望输出列表包含代表树的死角的“”,但我认为这不是必需的(这取决于用例)
-
@ThomasCook 实际上,这取决于所需的输出。当我写上面的评论时,也许 OP 不想要我想到的输出。它还取决于您是想要所有根到叶路径的列表,还是根到任何节点路径的列表。
-
实际上,根据您想要的输出,您的代码看起来不错,只是它可能应该在第二个等式中返回
[[ch]](一个字符串的列表,即单个字符长)。跨度> -
它应该返回 ["acf", "acd","cf", "cd", "f", "d","abe", "be", "e"]跨度>