1- # Reverse Level order tree traversal
2-
3- from BinaryTree import TreeNode
4-
5-
6- def reverseLevelOrderTraversal (root ):
7- S = []
8- Q = []
9-
10- # add first node in queue as entry point
11- Q .append (root )
12-
13- while len (Q ) > 0 :
14- root = Q .pop (0 )
15- S .append (root )
16-
17-
18- # If right node, add to queue
19- # Right first, since we want to pop it later as comparred to left nodes
20- if root .right_node :
21- Q .append (root .right_node )
22-
23- # If left node, add to queue
24- if root .left_node :
25- Q .append (root .left_node )
26-
27-
28- while len (S ) > 0 :
29- root = S .pop ()
30- print root .data ,
31-
32-
33- if __name__ == "__main__" :
34- bTree = TreeNode (1 )
35- bTree .left_node = TreeNode (2 )
36- bTree .right_node = TreeNode (3 )
37- bTree .left_node .left_node = TreeNode (4 )
38- bTree .left_node .right_node = TreeNode (5 )
39- bTree .right_node .left_node = TreeNode (6 )
40- bTree .left_node .left_node .left_node = TreeNode (12 )
41-
42- print "Reverse Level order traversal: " ,
43- reverseLevelOrderTraversal (bTree )
1+ """
2+ @Problem Statement:
3+ One of the many ways of representing a tree is to have an array(of length same as number of nodes),
4+ where each element in the node denotes the parent of that node.
5+ {-1, 0, 0, 1, 1} would represent a tree with -
6+ * 0 as root
7+ * 1 and 2 as children of 0
8+ * 3 and 4 as children of 1
9+ Given a similar representation, print reverse level order traversal of the corresponding tree.
10+ Level order traversal of a tree is where we traverse levels of tree one by one.
11+ @Input:
12+ N: Length of tree
13+ treeNode: representation of tree
14+ """
15+
16+
17+ def reverse_parent_tree (tree , root ):
18+ # base case for recursive call
19+ if len (tree ) == 0 :
20+ return
21+
22+ ret = tree
23+ tree = []
24+ for node in ret :
25+ if node in root :
26+ tree += root [node ]
27+ reverse_parent_tree (tree , root )
28+ print " " .join (ret )
29+
30+
31+ # N = 5
32+ # treeNode = ['-1', '0', '0', '2', '1']
33+ N = 9
34+ treeNode = ['8' , '7' , '0' , '5' , '5' , '8' , '7' , '0' , '-1' ]
35+ parent = {}
36+
37+ for index ,val in enumerate (treeNode ):
38+ if val in parent :
39+ parent [val ].append (str (index ))
40+ else :
41+ parent [val ] = [str (index )]
42+
43+ # print parent
44+
45+ reverse_parent_tree (parent ['-1' ], parent )
0 commit comments