@@ -2,128 +2,139 @@ class Node:
2
2
"""
3
3
A Node has data variable and pointers toits left and right nodes.
4
4
"""
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
+
9
11
10
12
def preorder (root ):
11
13
"""
12
14
PreOrder traversal: visit root node then its left subtree followed by right subtree.
13
15
"""
14
16
if root :
15
- print (root .data ,end = " " )
17
+ print (root .data , end = " " )
16
18
preorder (root .left )
17
19
preorder (root .right )
18
-
20
+
21
+
19
22
def postorder (root ):
20
23
"""
21
24
PostOrder traversal: visit left subtree followed by right subtree and then root node.
22
25
"""
23
26
if root :
24
27
postorder (root .left )
25
28
postorder (root .right )
26
- print (root .data ,end = " " )
27
-
29
+ print (root .data , end = " " )
30
+
31
+
28
32
def inorder (root ):
29
33
"""
30
34
InOrder traversal: visit its left subtree followed by root node and then right subtree.
31
35
"""
32
36
if root :
33
37
inorder (root .left )
34
- print (root .data ,end = " " )
38
+ print (root .data , end = " " )
35
39
inorder (root .right )
36
40
41
+
37
42
def height (root ):
38
43
"""
39
44
Recursive function for calculating height of the binary tree.
40
45
"""
41
46
if not root :
42
47
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
47
52
else :
48
- return right_Height + 1
49
-
53
+ return right_Height + 1
54
+
55
+
50
56
def levelorder1 (root ):
51
57
"""
52
58
Print whole binary tree in Level Order Traverse.
53
59
Level Order traverse: Visit nodes of the tree level-by-level.
54
60
"""
55
61
if not root :
56
62
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 )
62
68
if temp .left :
63
69
que .append (temp .left )
64
70
if temp .right :
65
71
que .append (temp .right )
66
72
67
- def levelorder2 (root ,level ):
73
+
74
+ def levelorder2 (root , level ):
68
75
"""
69
76
Level-wise traversal:
70
77
Print all nodes present at the given level of the binary tree.
71
78
"""
72
79
if not root :
73
80
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 )
79
86
80
- def print_left_to_right (root ,level ):
87
+
88
+ def print_left_to_right (root , level ):
81
89
"""
82
90
Print elements on particular level from left to right direction of the binary tree.
83
91
"""
84
92
if not root :
85
93
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
+
91
100
92
- def print_right_to_left (root ,level ):
101
+ def print_right_to_left (root , level ):
93
102
"""
94
103
Print elements on particular level from right to left direction of the binary tree.
95
104
"""
96
105
if not root :
97
106
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
+
104
114
def zigzag (root ):
105
115
"""
106
116
ZigZag traverse: Print node left to right and right to left, alternatively.
107
117
"""
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
114
124
else :
115
- print_right_to_left (root ,h )
116
- flag = 0
125
+ print_right_to_left (root , h )
126
+ flag = 0
117
127
118
- def main (): # Main function for testing.
128
+
129
+ def main (): # Main function for testing.
119
130
"""
120
131
Create binary tree.
121
132
"""
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 )
127
138
128
139
"""
129
140
All Traversals of the binary are as follows:
@@ -135,15 +146,16 @@ def main(): # Main function for testing.
135
146
print ("\n Post order Traversal is : " )
136
147
postorder (root )
137
148
print ("\n Height of Tree is : " )
138
- height_tree = height (root )
149
+ height_tree = height (root )
139
150
print (height_tree )
140
151
print ("\n Complete Level Order Traversal is : " )
141
152
levelorder1 (root )
142
153
print ("\n Level-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 )
145
156
print ("\n ZigZag order Traversal is : " )
146
157
zigzag (root )
147
158
159
+
148
160
if __name__ == "__main__" :
149
161
main ()
0 commit comments