我有一个Python对象树。树本质上是定义的:每个对象都有一个列表(可能是空的)。 我希望能够打印从根到每个叶子的所有路径的列表。
对于上面的树,这意味着:
result = [
[Node_0001,Node_0002,Node_0004],
[Node_0001,Node_0002,Node_0005,Node_0007],
[Node_0001,Node_0003,Node_0006],
]
必须将节点视为对象而不是整数(仅显示其整数ID)。 我不关心结果中分支的顺序。每个节点都有任意数量的子节点,并且递归级别也不固定。
我正在尝试递归方法:
def get_all_paths(node):
if len(node.children)==0:
return [[node]]
else:
return [[node] + get_all_paths(child) for child in node.children]
但我最终得到了嵌套列表,这不是我想要的:
[[Node_0001,
[Node_0002, [Node_0004]],
[Node_0002, [Node_0005, [Node_0007]]]],
[Node_0001, [Node_0003, [Node_0006]]]]
欢迎任何帮助,这个问题让我发疯:p
由于
答案 0 :(得分:2)
我认为这就是你在尝试的事情:
def get_all_paths(node):
if len(node.children) == 0:
return [[node]]
return [
[node] + path for child in node.children for path in get_all_paths(child)
]
对于节点的每个子节点,您应该获取子节点的所有路径,并将节点本身添加到每个路径。您将节点添加到路径列表中,而不是单独添加每个路径。