【发布时间】:2018-05-25 14:22:21
【问题描述】:
需要一些帮助来编写一个接受字符串并创建二叉树的 Haskell 函数。需要一些对 Haskell 有更好经验的人的帮助来为我填补一些漏洞并描述原因,因为这对我来说是一次学习经历。
我得到了一个用单个字符串编码的树,用于 Haskell 中的一个项目(例如 **B**DECA)。星号表示一个节点,任何其他字符表示一个叶子。我正在尝试使用从输入中读取的信息填充此数据结构。
data Trie = Leaf Char | Branch Trie Trie
我更喜欢数学和命令式编程,所以我观察到我可以通过从左到右解析来定义子树。正确的树将比* 多1 个字符。在数学上我会想到一个递归结构。
如果第一个字符不是*,则解决方案是第一个字符。否则解决方案是一个分支,其中子分支被反馈到函数中,其中左分支是第一组字符,其中字符输出编号为*,而右分支是其他所有字符。
constructTrie :: String -> Trie
constructTrie x = if x !! 1 == '*' then
let leftSubtree = (first time in drop 1 x where characters out number *'s)
rightSubtree = (rest of the characters in the drop 1 x)
in Branch constructTrie(leftSubtree) constructTrie(rightSubtree)
else Leaf x !! 1
大多数情况下,我需要帮助来定义左右子树,如果以这种方式定义它有什么问题。
【问题讨论】:
标签: string haskell tree huffman-code