'List of branches of a Python tree

I have a tree of Python objects. The tree is defined intrinsically: each object has a list (potentially empty) of children. I would like to be able to print a list of all paths from the root to each leaf.

enter image description here

In the case of the tree above, this would mean:

result = [
          [Node_0001,Node_0002,Node_0004],
          [Node_0001,Node_0002,Node_0005,Node_0007],
          [Node_0001,Node_0003,Node_0006],
         ]

The nodes must be treated as objects and not as integers (only their integer ID is displayed). I don't care about the order of branches in the result. Each node has an arbitrary number of children, and the level of recursion is not fixed either.

I am trying a recursive approach:

def get_all_paths(node):
    if len(node.children)==0:
        return [[node]]
    else:
        return [[node] + get_all_paths(child) for child in node.children]

but I end-up with nested lists, which is not what I want:

[[Node_0001,
  [Node_0002, [Node_0004]],
  [Node_0002, [Node_0005, [Node_0007]]]],
 [Node_0001, [Node_0003, [Node_0006]]]]

Any help would be gladly welcomed, this problem is driving me crazy :p

Thanks



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source