如何基于给定字母的摩尔斯码构建符合规则的二叉树?
摩尔斯码二叉树构建代码修正
核心逻辑说明
- 按摩尔斯码的字符顺序逐层遍历二叉树,
.对应左子节点,-对应右子节点 - 路径上无对应节点时,自动创建值为
*的占位节点 - 遍历到摩尔斯码最后一位时,将当前节点的值替换为对应字母
完整可运行代码
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
相关产品推荐
相关产品推荐

