Python树的分支列表

时间:2017-12-19 07:26:03

标签: python tree

我有一个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

由于

1 个答案:

答案 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)
    ]

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