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

如何基于给定字母的摩尔斯码构建符合规则的二叉树?

摩尔斯码二叉树构建代码修正

核心逻辑说明

  • 按摩尔斯码的字符顺序逐层遍历二叉树,.对应左子节点,-对应右子节点
  • 路径上无对应节点时,自动创建值为*的占位节点
  • 遍历到摩尔斯码最后一位时,将当前节点的值替换为对应字母

完整可运行代码

class BinaryTree:
    def __init__(self, key):
        self.dado = key
        self.esq = None
        self.dir = None

def parse_tree(root, letter, morse_code, index=0):
    # 递归终止条件:摩尔斯码遍历完成,给当前节点赋值为对应字母
    if index == len(morse_code):
        root.dado = letter
        return
    current_char = morse_code[index]
    # 处理左子节点(对应.)
    if current_char == '.':
        # 没有左子节点就先创建占位*
        if not root.esq:
            root.esq = BinaryTree('*')
        parse_tree(root.esq, letter, morse_code, index+1)
    # 处理右子节点(对应-)
    elif current_char == '-':
        # 没有右子节点就先创建占位*
        if not root.dir:
            root.dir = BinaryTree('*')
        parse_tree(root.dir, letter, morse_code, index+1)

# 主逻辑
N = int(input())
tree = BinaryTree('*')
for _ in range(N):
    letter, morse_code = input().split()
    parse_tree(tree, letter, morse_code)

补充:层级遍历验证函数(可选,用于打印树结构验证结果)

如果需要验证生成的树是否符合预期,可以加如下层级遍历代码:

from collections import deque

def print_tree(root):
    if not root:
        return
    q = deque([root])
    res = []
    while q:
        node = q.popleft()
        res.append(node.dado)
        if node.esq:
            q.append(node.esq)
        if node.dir:
            q.append(node.dir)
    print("层级遍历结果:", ' '.join(res))

# 调用验证
print_tree(tree)

以你给出的第一个输入样例测试,输出层级遍历结果为* A C T R !,和示例结构完全匹配。

内容的提问来源于stack exchange,提问作者Breno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:27:01