Python树的分支列表

问题描述 投票:0回答:1

我有一个Python对象树。树本质上是定义的:每个对象都有一个列表(可能是空的)。我希望能够打印从根到每个叶子的所有路径的列表。

enter image description here

对于上面的树,这意味着:

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

谢谢

python tree
1个回答
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)
    ]

对于节点的每个子节点,您应该获取子节点的所有路径,并将节点本身添加到每个路径。您将节点添加到路径列表中,而不是单独添加每个路径。

© www.soinside.com 2019 - 2024. All rights reserved.