Skip to content

Commit 341e36f

Browse files
committed
Level Order tree traversal
1 parent 83ed9db commit 341e36f

4 files changed

Lines changed: 105 additions & 89 deletions

File tree

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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)

TreeADT/reverseParentTree.py

Lines changed: 45 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,45 @@
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)

TreeADT/treeTraversal.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,17 @@ def post_order_traversal(root):
5454
post_order_traversal(root.right_node)
5555
print root.data,
5656

57+
def level_order_traversal(root):
58+
Q = []
59+
Q.append(root)
60+
while len(Q) > 0:
61+
root = Q.pop(0)
62+
print root.data,
63+
if root.left_node:
64+
Q.append(root.left_node)
65+
if root.right_node:
66+
Q.append(root.right_node)
67+
5768

5869
if __name__ == "__main__":
5970
bTree = TreeNode(1)
@@ -73,4 +84,9 @@ def post_order_traversal(root):
7384
print ""
7485
print "*"*80
7586
print "PostOrder Tree traversal"
76-
post_order_traversal(bTree)
87+
post_order_traversal(bTree)
88+
89+
print ""
90+
print "*"*80
91+
print "LevelOrder Tree traversal"
92+
level_order_traversal(bTree)

reverseParentTree.py

Lines changed: 0 additions & 45 deletions
This file was deleted.

0 commit comments

Comments
 (0)