如何将树形结构转换为扁平数据结构?求Python实现思路
问题1:树形结构文本格式转换
给定树形结构:
1 / \ 2 3 /\ 4 5
需要转换为:
1 1 1 | | | 2 2 3 | | 4 5
实现思路
- 统计每个节点的叶子后代总数:根节点1的叶子是4、5、3,共3个,所以在第一行重复3次;节点2的叶子是4、5,共2个,第二行重复2次;节点3是叶子,重复1次;节点4、5各为叶子,各出现1次。
- 按层级遍历树(如广度优先),对每一层的节点,根据其叶子后代数量重复节点值,拼接成当前行的文本。
- 生成竖线连接行:每一行节点的下一行,需对应生成竖线行,竖线位置与下一行元素一一对应,用空格分隔;最后一行无需后续竖线行。
- 控制每一行的缩进,可根据节点最大宽度和层级深度计算缩进量,保证整体对齐美观。
问题2:JSON层级结构扁平化展开
给定输入JSON:
{ "id": "csiudfysd", "events": [ {"value": "refuelling", "dates": ["23rd","24th"]}, {"value": "deicing"} ] }
对应树形结构:
"csiudfysd" / \ "refuelling" "deicing" /\ 23rd 24th
期望输出:
[ { "id": "csiudfysd", "value": "refuelling", "date": "23rd" }, { "id": "csiudfysd", "value": "refuelling", "date": "24th" }, { "id": "csiudfysd", "value": "deicing" } ]
实现思路
- 明确展开规则:根节点的
id需保留在每个结果对象中;每个event的value必选,若event包含dates数组,则为每个日期生成含date字段的对象,否则生成仅含id和value的对象。 - 遍历顶层的
events数组,对每个event做分支处理:- 若存在
dates字段,循环遍历dates中的每一项,将id、当前event的value和当前日期组合成新对象; - 若不存在
dates字段,直接将id和当前event的value组合成新对象;
- 若存在
- 收集所有生成的对象,组成最终结果数组,无需复杂的parent映射,直接基于顶层数据迭代拆解即可。
内容的提问来源于stack exchange,提问作者Lewis
相关产品推荐
相关产品推荐

