You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:54:02