我有
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)
我知道我的错误是我使用了char,并且我的函数需要返回字符串列表,但是我不知道如何解决它。
data BTree = Empty | Node Char BTree BTree
genWords :: BTree -> [String]
genWords Empty = []
genWords (Node ch left right) = [ch] : genWords left ++ genWords right
这将在评估右侧之前向下钻取树的左侧,将每个节点的char添加到字符串数组中。请注意,我是如何将ch
放入[]
的,这将char变成了字符串,因为haskell中的字符串只是char的列表。