1
1
"""
2
2
This is pure python implementation of tree traversal algorithms
3
3
"""
4
- from __future__ import print_function
5
-
6
4
import queue
7
-
8
- try :
9
- raw_input # Python 2
10
- except NameError :
11
- raw_input = input # Python 3
5
+ from typing import List
12
6
13
7
14
8
class TreeNode :
@@ -20,62 +14,58 @@ def __init__(self, data):
20
14
21
15
def build_tree ():
22
16
print ("\n ********Press N to stop entering at any point of time********\n " )
23
- print ("Enter the value of the root node: " , end = "" )
24
- check = raw_input ().strip ().lower ()
25
- if check == 'n' :
17
+ check = input ("Enter the value of the root node: " ).strip ().lower () or "n"
18
+ if check == "n" :
26
19
return None
27
- data = int (check )
28
- q = queue .Queue ()
29
- tree_node = TreeNode (data )
20
+ q : queue .Queue = queue .Queue ()
21
+ tree_node = TreeNode (int (check ))
30
22
q .put (tree_node )
31
23
while not q .empty ():
32
24
node_found = q .get ()
33
- print ( "Enter the left node of %s: " % node_found .data , end = "" )
34
- check = raw_input ( ).strip ().lower ()
35
- if check == 'n' :
25
+ msg = "Enter the left node of %s: " % node_found .data
26
+ check = input ( msg ).strip ().lower () or "n"
27
+ if check == "n" :
36
28
return tree_node
37
- left_data = int (check )
38
- left_node = TreeNode (left_data )
29
+ left_node = TreeNode (int (check ))
39
30
node_found .left = left_node
40
31
q .put (left_node )
41
- print ( "Enter the right node of %s: " % node_found .data , end = "" )
42
- check = raw_input ( ).strip ().lower ()
43
- if check == 'n' :
32
+ msg = "Enter the right node of %s: " % node_found .data
33
+ check = input ( msg ).strip ().lower () or "n"
34
+ if check == "n" :
44
35
return tree_node
45
- right_data = int (check )
46
- right_node = TreeNode (right_data )
36
+ right_node = TreeNode (int (check ))
47
37
node_found .right = right_node
48
38
q .put (right_node )
49
39
50
40
51
- def pre_order (node ) :
41
+ def pre_order (node : TreeNode ) -> None :
52
42
if not isinstance (node , TreeNode ) or not node :
53
43
return
54
44
print (node .data , end = " " )
55
45
pre_order (node .left )
56
46
pre_order (node .right )
57
47
58
48
59
- def in_order (node ) :
49
+ def in_order (node : TreeNode ) -> None :
60
50
if not isinstance (node , TreeNode ) or not node :
61
51
return
62
52
in_order (node .left )
63
53
print (node .data , end = " " )
64
54
in_order (node .right )
65
55
66
56
67
- def post_order (node ) :
57
+ def post_order (node : TreeNode ) -> None :
68
58
if not isinstance (node , TreeNode ) or not node :
69
59
return
70
60
post_order (node .left )
71
61
post_order (node .right )
72
62
print (node .data , end = " " )
73
63
74
64
75
- def level_order (node ) :
65
+ def level_order (node : TreeNode ) -> None :
76
66
if not isinstance (node , TreeNode ) or not node :
77
67
return
78
- q = queue .Queue ()
68
+ q : queue . Queue = queue .Queue ()
79
69
q .put (node )
80
70
while not q .empty ():
81
71
node_dequeued = q .get ()
@@ -86,10 +76,10 @@ def level_order(node):
86
76
q .put (node_dequeued .right )
87
77
88
78
89
- def level_order_actual (node ) :
79
+ def level_order_actual (node : TreeNode ) -> None :
90
80
if not isinstance (node , TreeNode ) or not node :
91
81
return
92
- q = queue .Queue ()
82
+ q : queue . Queue = queue .Queue ()
93
83
q .put (node )
94
84
while not q .empty ():
95
85
list = []
@@ -106,10 +96,10 @@ def level_order_actual(node):
106
96
107
97
108
98
# iteration version
109
- def pre_order_iter (node ) :
99
+ def pre_order_iter (node : TreeNode ) -> None :
110
100
if not isinstance (node , TreeNode ) or not node :
111
101
return
112
- stack = []
102
+ stack : List [ TreeNode ] = []
113
103
n = node
114
104
while n or stack :
115
105
while n : # start from root node, find its left child
@@ -122,10 +112,10 @@ def pre_order_iter(node):
122
112
n = n .right
123
113
124
114
125
- def in_order_iter (node ) :
115
+ def in_order_iter (node : TreeNode ) -> None :
126
116
if not isinstance (node , TreeNode ) or not node :
127
117
return
128
- stack = []
118
+ stack : List [ TreeNode ] = []
129
119
n = node
130
120
while n or stack :
131
121
while n :
@@ -136,7 +126,7 @@ def in_order_iter(node):
136
126
n = n .right
137
127
138
128
139
- def post_order_iter (node ) :
129
+ def post_order_iter (node : TreeNode ) -> None :
140
130
if not isinstance (node , TreeNode ) or not node :
141
131
return
142
132
stack1 , stack2 = [], []
@@ -153,38 +143,45 @@ def post_order_iter(node):
153
143
print (stack2 .pop ().data , end = " " )
154
144
155
145
156
- if __name__ == '__main__' :
157
- print ("\n ********* Binary Tree Traversals ************\n " )
146
+ def prompt (s : str = "" , width = 50 , char = "*" ) -> str :
147
+ if not s :
148
+ return "\n " + width * char
149
+ left , extra = divmod (width - len (s ) - 2 , 2 )
150
+ return f"{ left * char } { s } { (left + extra ) * char } "
151
+
152
+
153
+ if __name__ == "__main__" :
154
+ print (prompt ("Binary Tree Traversals" ))
158
155
159
156
node = build_tree ()
160
- print (" \n ********* Pre Order Traversal ************" )
157
+ print (prompt ( " Pre Order Traversal" ) )
161
158
pre_order (node )
162
- print (" \n ****************************************** \n " )
159
+ print (prompt () + " \n " )
163
160
164
- print (" \n ********* In Order Traversal ************" )
161
+ print (prompt ( " In Order Traversal" ) )
165
162
in_order (node )
166
- print (" \n ****************************************** \n " )
163
+ print (prompt () + " \n " )
167
164
168
- print (" \n ********* Post Order Traversal ************" )
165
+ print (prompt ( " Post Order Traversal" ) )
169
166
post_order (node )
170
- print (" \n ****************************************** \n " )
167
+ print (prompt () + " \n " )
171
168
172
- print (" \n ********* Level Order Traversal ************" )
169
+ print (prompt ( " Level Order Traversal" ) )
173
170
level_order (node )
174
- print (" \n ****************************************** \n " )
171
+ print (prompt () + " \n " )
175
172
176
- print (" \n ********* Actual Level Order Traversal ************" )
173
+ print (prompt ( " Actual Level Order Traversal" ) )
177
174
level_order_actual (node )
178
- print ("\n ****************************************** \n " )
175
+ print ("*" * 50 + " \n " )
179
176
180
- print (" \n ********* Pre Order Traversal - Iteration Version ************" )
177
+ print (prompt ( " Pre Order Traversal - Iteration Version" ) )
181
178
pre_order_iter (node )
182
- print (" \n ****************************************** \n " )
179
+ print (prompt () + " \n " )
183
180
184
- print (" \n ********* In Order Traversal - Iteration Version ************" )
181
+ print (prompt ( " In Order Traversal - Iteration Version" ) )
185
182
in_order_iter (node )
186
- print (" \n ****************************************** \n " )
183
+ print (prompt () + " \n " )
187
184
188
- print (" \n ********* Post Order Traversal - Iteration Version ************" )
185
+ print (prompt ( " Post Order Traversal - Iteration Version" ) )
189
186
post_order_iter (node )
190
- print (" \n ****************************************** \n " )
187
+ print (prompt () )
0 commit comments