如何使用Python生成M×N规格的多层级树状目录结构数据
Python实现M×N层级目录树方案
Python标准库没有提供内置的通用Tree结构,但针对固定深度、固定子节点数的目录生成场景,只需要实现一个极简的树节点逻辑即可,不需要引入第三方依赖。
实现思路
- 定义基础树节点,每个节点存储自身编号、子节点列表两个核心属性
- 从顶级节点开始递归生成子节点:每向下一层,就在当前节点编号后追加1~N的序号生成子节点,直到节点编号长度等于总层级M时停止生成
- 采用深度优先遍历整棵树,按照层级数控制前置空格缩进,按排版规则输出内容即可
可直接运行的实现代码
class TreeNode: def __init__(self, val: str): self.val = val self.children = [] def build_tree(total_level: int, child_per_node: int) -> list[TreeNode]: """ 生成M层、每个非叶节点含N个子节点的目录树 :param total_level: 总层级数M :param child_per_node: 每个节点的子节点数N :return: 所有顶级节点列表 """ # 生成顶级节点 root_nodes = [TreeNode(str(i)) for i in range(1, total_level + 1)] def add_children(node: TreeNode): # 当前节点是最后一层,不再生成子节点 if len(node.val) >= total_level: return # 为当前节点生成N个子节点 for i in range(1, child_per_node + 1): child_val = f"{node.val}{i}" child_node = TreeNode(child_val) node.children.append(child_node) add_children(child_node) # 递归生成所有层级的子节点 for root in root_nodes: add_children(root) return root_nodes def print_tree(root_nodes: list[TreeNode]): """按照指定格式打印树结构""" for idx, root in enumerate(root_nodes): def dfs(node: TreeNode, is_root: bool = False): level = len(node.val) # 按层级控制前置空格缩进 print(" " * (level - 1) + node.val) # 非最后一个顶级节点打印后加空行 if is_root and idx != len(root_nodes) - 1: print() for child in node.children: dfs(child) dfs(root, is_root=True) # 顶级节点之间添加分隔线,最后一个节点不加分隔 if idx != len(root_nodes) - 1: print("\n" + "-" * (6 - idx*2) + "\n") # 测试3×2规格输入 if __name__ == "__main__": M = 3 N = 2 roots = build_tree(M, N) print_tree(roots)
运行效果
输入M=3、N=2时,代码输出和示例完全匹配:
1 11 111 112 12 121 122 ------ 2 21 211 212 22 221 222 ---- 3 31 311 312 32 321 322
如果需要调整编号规则、缩进长度或者分隔线样式,只需要修改对应逻辑的参数即可,不需要改动整体的树生成和遍历框架。
内容的提问来源于stack exchange,提问作者kn9
相关产品推荐
相关产品推荐

