Skip to content

Commit 2c9050c

Browse files
authored
Update binary_tree_traversals.py
1 parent b5285c1 commit 2c9050c

File tree

1 file changed

+68
-56
lines changed

1 file changed

+68
-56
lines changed

data_structures/binary_tree/binary_tree_traversals.py

Lines changed: 68 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,128 +2,139 @@ class Node:
22
"""
33
A Node has data variable and pointers toits left and right nodes.
44
"""
5-
def __init__(self,data):
6-
self.left=None
7-
self.right=None
8-
self.data=data
5+
6+
def __init__(self, data):
7+
self.left = None
8+
self.right = None
9+
self.data = data
10+
911

1012
def preorder(root):
1113
"""
1214
PreOrder traversal: visit root node then its left subtree followed by right subtree.
1315
"""
1416
if root:
15-
print(root.data,end=" ")
17+
print(root.data, end=" ")
1618
preorder(root.left)
1719
preorder(root.right)
18-
20+
21+
1922
def postorder(root):
2023
"""
2124
PostOrder traversal: visit left subtree followed by right subtree and then root node.
2225
"""
2326
if root:
2427
postorder(root.left)
2528
postorder(root.right)
26-
print(root.data,end=" ")
27-
29+
print(root.data, end=" ")
30+
31+
2832
def inorder(root):
2933
"""
3034
InOrder traversal: visit its left subtree followed by root node and then right subtree.
3135
"""
3236
if root:
3337
inorder(root.left)
34-
print(root.data,end=" ")
38+
print(root.data, end=" ")
3539
inorder(root.right)
3640

41+
3742
def height(root):
3843
"""
3944
Recursive function for calculating height of the binary tree.
4045
"""
4146
if not root:
4247
return 0
43-
left_Height=height(root.left)
44-
right_Height=height(root.right)
45-
if left_Height>right_Height:
46-
return left_Height+1
48+
left_Height = height(root.left)
49+
right_Height = height(root.right)
50+
if left_Height > right_Height:
51+
return left_Height + 1
4752
else:
48-
return right_Height+1
49-
53+
return right_Height + 1
54+
55+
5056
def levelorder1(root):
5157
"""
5258
Print whole binary tree in Level Order Traverse.
5359
Level Order traverse: Visit nodes of the tree level-by-level.
5460
"""
5561
if not root:
5662
return
57-
temp=root
58-
que=[temp]
59-
while len(que)>0:
60-
print(que[0].data,end=" ")
61-
temp=que.pop(0)
63+
temp = root
64+
que = [temp]
65+
while len(que) > 0:
66+
print(que[0].data, end=" ")
67+
temp = que.pop(0)
6268
if temp.left:
6369
que.append(temp.left)
6470
if temp.right:
6571
que.append(temp.right)
6672

67-
def levelorder2(root,level):
73+
74+
def levelorder2(root, level):
6875
"""
6976
Level-wise traversal:
7077
Print all nodes present at the given level of the binary tree.
7178
"""
7279
if not root:
7380
return root
74-
if level==1:
75-
print(root.data,end=" ")
76-
elif level>1:
77-
levelorder2(root.left,level-1)
78-
levelorder2(root.right,level-1)
81+
if level == 1:
82+
print(root.data, end=" ")
83+
elif level > 1:
84+
levelorder2(root.left, level - 1)
85+
levelorder2(root.right, level - 1)
7986

80-
def print_left_to_right(root,level):
87+
88+
def print_left_to_right(root, level):
8189
"""
8290
Print elements on particular level from left to right direction of the binary tree.
8391
"""
8492
if not root:
8593
return
86-
if level==1:
87-
print(root.data,end=" ")
88-
elif level>1:
89-
print_left_to_right(root.left,level-1)
90-
print_left_to_right(root.right,level-1)
94+
if level == 1:
95+
print(root.data, end=" ")
96+
elif level > 1:
97+
print_left_to_right(root.left, level - 1)
98+
print_left_to_right(root.right, level - 1)
99+
91100

92-
def print_right_to_left(root,level):
101+
def print_right_to_left(root, level):
93102
"""
94103
Print elements on particular level from right to left direction of the binary tree.
95104
"""
96105
if not root:
97106
return
98-
if level==1:
99-
print(root.data,end=" ")
100-
elif level>1:
101-
print_right_to_left(root.right,level-1)
102-
print_right_to_left(root.left,level-1)
103-
107+
if level == 1:
108+
print(root.data, end=" ")
109+
elif level > 1:
110+
print_right_to_left(root.right, level - 1)
111+
print_right_to_left(root.left, level - 1)
112+
113+
104114
def zigzag(root):
105115
"""
106116
ZigZag traverse: Print node left to right and right to left, alternatively.
107117
"""
108-
flag=0
109-
height_tree=height(root)
110-
for h in range(1,height_tree+1):
111-
if flag==0:
112-
print_left_to_right(root,h)
113-
flag=1
118+
flag = 0
119+
height_tree = height(root)
120+
for h in range(1, height_tree + 1):
121+
if flag == 0:
122+
print_left_to_right(root, h)
123+
flag = 1
114124
else:
115-
print_right_to_left(root,h)
116-
flag=0
125+
print_right_to_left(root, h)
126+
flag = 0
117127

118-
def main(): # Main function for testing.
128+
129+
def main(): # Main function for testing.
119130
"""
120131
Create binary tree.
121132
"""
122-
root=Node(1)
123-
root.left=Node(2)
124-
root.right=Node(3)
125-
root.left.left=Node(4)
126-
root.left.right=Node(5)
133+
root = Node(1)
134+
root.left = Node(2)
135+
root.right = Node(3)
136+
root.left.left = Node(4)
137+
root.left.right = Node(5)
127138

128139
"""
129140
All Traversals of the binary are as follows:
@@ -135,15 +146,16 @@ def main(): # Main function for testing.
135146
print("\nPost order Traversal is : ")
136147
postorder(root)
137148
print("\nHeight of Tree is : ")
138-
height_tree=height(root)
149+
height_tree = height(root)
139150
print(height_tree)
140151
print("\nComplete Level Order Traversal is : ")
141152
levelorder1(root)
142153
print("\nLevel-wise order Traversal is : ")
143-
for h in range(1,height_tree+1):
144-
levelorder2(root,h)
154+
for h in range(1, height_tree + 1):
155+
levelorder2(root, h)
145156
print("\nZigZag order Traversal is : ")
146157
zigzag(root)
147158

159+
148160
if __name__ == "__main__":
149161
main()

0 commit comments

Comments
 (0)