Search code examples
pythondata-structuresgraphbacktracking

print all the path of n-ary tree python


I want to print all the paths from the root to the leaf nodes in an N-ary tree in python. I have an idea to print it in binary tree but doing this in N-ary doesn't give me the correct result.

I'm poping and Visiting each node from the child node list here but not sure how to print the paths separately for each leaf node.

class createnode:
 def __init__(self,val):
   self.data=val
   self.child=[]

def traverse(root):
    global path
    if root.child:
     while(len(root.child)>0):
       x=root.child.pop(0)
       path.append(x.data)
       traverse(x)
    else:
      printarray(path)

def printarray(path):
  print(path)


root = createnode(10)
root.child.append(createnode(2))
root.child.append(createnode(4))

root.child[0].child.append(createnode(15))
root.child[0].child.append(createnode(20))
root.child[0].child.append(createnode(25))
root.child[0].child.append(createnode(30))

root.child[1].child.append(createnode(45))
root.child[1].child.append(createnode(50))
root.child[1].child.append(createnode(55))
root.child[1].child.append(createnode(60))
path=[]
total_val=30
traverse(root)

Expected output:

10, 2, 15

10, 2, 20

10, 2, 25

10, 2, 30

10, 4, 45

10, 4, 50

10, 4, 55

10, 4, 60


Solution

  • Try this:

    def traverse(node, path = []):
        path.append(node.data)
        if len(node.child) == 0:
            print(path)
            path.pop()
        else:
            for child in node.child:
                traverse(child, path)
            path.pop()
    

    Produces the following output with your example:

    [10, 2, 15]
    [10, 2, 20]
    [10, 2, 25]
    [10, 2, 30]
    [10, 4, 45]
    [10, 4, 50]
    [10, 4, 55]
    [10, 4, 60]