如何用Python按规则从字符串列表生成指定结构的树形结构?
Python 实现方案
1 修正Node类定义
原Node类存在语法错误和可变默认参数的隐患,修正后代码如下:
class Node: def __init__(self, c='%', children=None): self.c = c # 节点存储的字符 self.children = children if children is not None else {} # 键为子节点字符,值为子Node实例
2 树构造逻辑
采用层序遍历的思路逐层生成节点,完全匹配给定规则:
def build_tree(data): if not data: return None # 生成根节点 root = Node(c=data[0]) current_level_nodes = [root] # 逐层处理后续元素 for layer_str in data[1:]: next_level_nodes = [] # 给当前层每个节点生成子节点 for parent_node in current_level_nodes: for char in layer_str: child = Node(c=char) parent_node.children[char] = child next_level_nodes.append(child) current_level_nodes = next_level_nodes # 最后一层节点默认为叶子(children为空),无需额外处理 return root
3 结构验证辅助函数
可以用以下递归函数打印树结构,确认生成结果符合预期:
def print_tree(node, indent=0): indent_str = " " * indent print(f"{indent_str}c='{node.c}'") if node.children: print(f"{indent_str}children={{") for char, child in node.children.items(): print(f"{indent_str} '{char}': ", end="") print_tree(child, indent + 2) print(f"{indent_str}}}") # 测试调用 if __name__ == "__main__": data = ['1', '8TUV', '0', '0', '4GHI', '6MNO', '8TUV', '5JKL', '8TUV', '6MNO', '5JKL'] root = build_tree(data) print_tree(root)
内容的提问来源于stack exchange,提问作者ritz
相关产品推荐
相关产品推荐

