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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 04:27:04