我正在编写一个程序,该程序将创建一个摩尔斯电码字母的二叉树(以及句号和撇号),然后将读取一行摩尔斯电码并将其翻译成英语。 (是的,我知道查找表会更容易,但是我需要整理我的二叉树)。我认为我的问题很多是我想按字母顺序而不是按符号顺序将值放入树中。但是肯定有一种方法可以做到吗?因为如果我有一百万个非数字的值,那么我就不需要将它们按最简单的插入顺序排序...对吗?
它是从一个文本文件中读取的,其中每一行在摩尔斯电码中都有一个句子。
-.... .. ... .. ... ..- ..--。 .-.-.-例如,“这很有趣”。
符号之间的1个空格表示它是一个新字母,2个空格表示它是一个新单词。
就目前情况而言,我得到的是上面给出的该行的输出“。$$$”,这意味着它正在读取一个句点,然后得到一个错误,该错误由('$$$')表示,这显然是错误的。 ..
就像我之前说过的,我知道我很复杂,但是肯定有一种方法可以不首先对树中的值进行排序,而我想现在就弄清楚了,而不是在某个时候紧缩。
有人有见识吗?这件事太明显了,以至于让我感到尴尬吗?
最佳答案
欢迎来到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
嵌套字典,这将更易于使用。