Python - 摩尔斯电码通过二叉树进行翻译

时间:2013-04-23 05:42:44

标签: python binary-search-tree morse-code

我正在编写一个程序,它将创建摩尔斯电码字母表的二叉树(以及句号和撇号),然后读取一行摩尔斯电码并将其翻译成英语。 (是的,我知道查找表会更容易,但我需要整理我的二叉树)。我认为我的问题很多就是我想按字母顺序将值放入树中,而不是按符号顺序排列。但肯定有办法做到这一点?因为如果我有一百万个不是数字的值,我就不需要将它们排序成最简单的插入顺序......对吗?

它正在从一个文本文件中读取,其中每行在摩尔斯电码中都有一个句子。 - .... .. .. .. .. ..-。 ..- - 。 .- .- .-例如,这是“这很有趣”。 符号之间的1个空格表示它是一个新字母,2个空格表示它是一个新单词。

按照目前的情况,我得到上面给出的那一行的输出“。$$$”,这意味着它正在读取一段时间,然后得到一个由('$$$')符号化的错误,这是显然错了......

就像我之前说过的,我知道我很复杂,但肯定有一种方法可以做到这一点,而不首先在我的树中排序值,我想现在想出来,而不是我的时候在时间紧缩中。

有没有人有任何见解?这是非常明显的事情,我不应该因为询问而感到尴尬吗?

1 个答案:

答案 0 :(得分:3)

欢迎来到SO并感谢一个有趣的问题。是的,它让我觉得你有点过于复杂。例如,这里绝对不需要使用类。您可以重用现有的python数据结构来表示树:

def add(node, value, code):
    if code:
        add(node.setdefault(code[0], {}), value, code[1:])
    else:
        node['value'] = value

tree = {}
for value, code in alphabet:
    add(tree, value, code)

import pprint; pprint.pprint(tree)    

这为您提供了一个嵌套的词典,其中包含.-value键,这些词组更易于使用。