Python实现Morse Code解码二叉树无法处理多字符词组问题求助
问题触发原因
你当前实现的translate_mc_to_letter方法仅支持单个摩尔斯字母的转译,输入仅允许包含.和-两种字符,没有处理多字母场景下的空格分隔符:
- 输入
.... .包含空格,遍历到空格字符时,不匹配char == "."的判断,会走else分支尝试访问当前节点的右子节点 - 完成4个
.的遍历后,当前节点已经是对应字母H的叶子节点,没有右子节点,此时current会被赋值为None - 方法最后尝试访问
current.val时,就会触发NoneType无val属性的报错
修复方案
可以保留原有单字母转译的逻辑,新增多字符转译方法,先按空格切割输入,再逐个转译拼接,同时补充边界校验避免异常:
class Morse_Code_Bin_Tree(object): """Class that initializes and populates a binary tree for translating morse code strings into letters. """ def __init__(self): self.head = Node("*") letters = "ETIANMSURWDKGOHVF*L*PJBXCYZQ**54*3***2**+****16=/*****7***8*90" current = self.head nexts = [] for char in letters: if current.left == None: current.left = Node(char) else: if current.right == None: current.right = Node(char) else: nexts.append(current.left) nexts.append(current.right) current = nexts.pop(0) current.left = Node(char) def translate_mc_to_letter(self, mc_ltr_str): """method that takes a string input of single morse code character, returns the corresponding letter e.g. "...." => "H" """ current = self.head # 新增非法字符校验 for char in mc_ltr_str: if char not in (".", "-"): raise ValueError(f"非法摩尔斯字符: {char},单字符输入仅支持.和-") if char == ".": current = current.left else: current = current.right # 新增空节点校验 if current is None: raise ValueError(f"无效的摩尔斯序列: {mc_ltr_str},无对应字符") return current.val def translate_mc_to_text(self, mc_str): """转译多字母摩尔斯字符串,空格为字母分隔符""" # 按空格分割,过滤空片段(避免连续空格的情况) mc_letters = [seg for seg in mc_str.strip().split(" ") if seg] res = [] for seg in mc_letters: res.append(self.translate_mc_to_letter(seg)) return "".join(res) class Node(object): """binary node""" def __init__(self, char): self.val = char self.left = None self.right = None
调用示例:
mc_tree = Morse_Code_Bin_Tree() # 单字母转译 print(mc_tree.translate_mc_to_letter("....")) # 输出 H # 多字母转译 print(mc_tree.translate_mc_to_text(".... .")) # 输出 HE
内容的提问来源于stack exchange,提问作者merchmallow
相关产品推荐
相关产品推荐

