2013-04-23 230 views
1

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

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

现在,我得到了上面给出的那一行的输出“。$$$”,这意味着它正在读取一段时间,然后得到一个由('$$$')符号表示的错误,它显然是不对的......

就像我之前说的,我知道我是复杂的,但肯定有一种方法可以做到这一点,不必先把我的树排序的价值观,我想这出现,而不是当我处于时间紧缩状态时。

有没有人有任何见解?这是非常明显的东西,我应该为此而感到尴尬吗?

回答

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这将是更容易使用嵌套的字典。

+0

谢谢! 但我已经想出了如何用字典来做这种事情。我现在正在做一个链接列表的学习,我不明白为什么它不适用于这样的链接...是否有一些固有的缺陷与我不知道的“whatsits”相关联关于,还是我的实现是关闭的? 我已经想通了链表和如何插入一些值到他们当中没有得到一切混乱的,所以我不明白为什么我在与一些似乎很类似我这样的问题... 还有什么提示?或者我应该完全放弃这种方法吗? – user2309856 2013-04-23 13:05:58

+0

@ user2309856:我个人不认为学习“链表”和其他低级数据结构有什么实际价值。在高级语言中,这种东西已经提供给你。我的建议:学习如何在简单但真实的问题上编写好的惯用python。例如,您的摩尔斯电码解码器 - 正如您正确指出的那样,查找表是最好的方法,并且不会超过5行代码。问题解决了,直到下一个。 – georg 2013-04-23 13:35:39