1+ import collections
2+
3+
14class Node :
25 def __init__ (self , data ) :
36 self .left = None
47 self .right = None
58 self .data = data
69
7- def insert (self , data ) :
8- if data < self .data :
9- if self .left :
10- self .left .insert (data )
11- else :
12- self .left = Node (data )
13- return
14-
10+ class BinaryTree :
11+ def __init__ (self , root ) :
12+ self .root = Node (root )
13+
14+ def PrintTree (self , trav_type ) :
15+ if trav_type == "preorder" :
16+ return self .preorder_tree (tree .root , "" )
17+ elif trav_type == "inorder" :
18+ return self .inorder_tree (tree .root , "" )
19+ elif trav_type == "postorder" :
20+ return self .postorder_tree (tree .root , "" )
21+ elif trav_type == "levelorder" :
22+ return self .levelorder_tree (tree .root )
1523 else :
16- if self .right :
17- self .right .insert (data )
18- else :
19- self .right = Node (data )
20- return
24+ return False
25+
26+ def preorder_tree (self , start , trav ) :
27+ ## ROOT > LEFT > RIGHT
28+ if start :
29+ trav += (str (start .data ) + "__" )
30+ trav = self .preorder_tree (start .left , trav )
31+ trav = self .preorder_tree (start .right , trav )
32+ return trav
33+
34+ def inorder_tree (self , start , trav ) :
35+ ## LEFT > ROOT > RIGHT
36+ if start :
37+ trav = self .inorder_tree (start .left , trav )
38+ trav += (str (start .data ) + "__" )
39+ trav = self .inorder_tree (start .right , trav )
40+ return trav
2141
22- def PrintTree (self ) :
23- if self .left :
24- self .left .PrintTree ()
25- print (self .data )
26- if self .right :
27- self .right .PrintTree ()
42+ def postorder_tree (self , start , trav ) :
43+ ## LEFT > RIGHT > ROOT
44+ if start :
45+ trav = self .postorder_tree (start .left , trav )
46+ trav = self .postorder_tree (start .right , trav )
47+ trav += (str (start .data ) + "__" )
48+ return trav
49+ def levelorder_tree (self , start ) :
50+ ans = []
51+ if start is None :
52+ return ans
53+
54+ queue = collections .deque ()
55+ queue .append (start )
56+
57+ while queue :
58+ currSize = len (queue )
59+ currList = []
60+
61+ while currSize > 0 :
62+ currNode = queue .popleft ()
63+ currList .append (currNode .data )
64+ currSize -= 1
65+
66+ if currNode .left is not None :
67+ queue .append (currNode .left )
68+
69+ if currNode .right is not None :
70+ queue .append (currNode .right )
71+ ans .append (currList )
72+ return ans
73+
74+
75+ """_summary_
76+ 2
77+ / \
78+ 3 4
79+ / \
80+ 5 6
81+ [2]
82+ [3.4]
83+ [5,6]
84+ """
85+
86+
87+ tree = BinaryTree (2 )
88+ tree .root .left = Node (3 )
89+ tree .root .right = Node (4 )
90+ tree .root .left .left = Node (5 )
91+ tree .root .left .right = Node (6 )
2892
29- l = Node (2 )
30- l .insert (5 )
31- l .insert (1 )
32- l .insert (7 )
33- l .insert (9 )
34- l .insert (10 )
35- l .PrintTree ()
93+ print (tree .PrintTree ("levelorder" ))
0 commit comments