递归实现父节点生成子节点的图结构方法及代码示例
三维坐标层级递归图结构实现
生成规则
- 起始根节点为坐标
[0,0,0] - 每个父节点生成3个子节点:分别将坐标的三个维度值各加1,例如父节点
[1,0,0]对应子节点[2,0,0]、[1,1,0]、[1,0,1] - 迭代生成到指定轮次后终止
- 基于已有的
child_generator_2函数实现,保留原有代码的迭代框架
原有代码逻辑缺陷
- 迭代逻辑仅沿单分支向下生成,没有遍历同层所有父节点,会漏掉大部分分支节点
- 浅拷贝节点对象会导致引用错位,修改副本的子节点属性无法同步到原始树结构
- 层级参数传递错位,子节点生成时传入的层级值和实际迭代轮次不匹配
修正后实现代码
import numpy import copy # 业务参数按实际场景赋值 max_level = 5 # 最大迭代轮次 p = [0]*4 # 原代码传入的业务参数,len(p)-1为坐标维度 a = None # 原代码传入的业务参数 dim = len(p) - 1 # 初始化根节点(第0层,坐标[0,0,0]) tau = list(numpy.zeros(dim)) _, root = child_generator_2(dim, 1, p, a, tau) current_level_nodes = list(root.children) current_level = 1 # 逐层迭代生成,直到达到最大层数 while current_level < max_level: next_level_nodes = [] l = 0 # 保留原代码的索引while遍历结构 while l < len(current_level_nodes): node = current_level_nodes[l] _, temp_parent = child_generator_2(dim, current_level + 1, p, a, node.name) node.children = temp_parent.children next_level_nodes.extend(list(node.children)) l += 1 # 移动到下一层 current_level_nodes = next_level_nodes current_level += 1 # 变量root即为完整生成的图结构根节点
内容的提问来源于stack exchange,提问作者Nicola Alimonda
相关产品推荐
相关产品推荐

