1
+ from queuelinkedlist import LinkedListQueue
2
+ class _Node :
3
+ __slots__ = '_element' , '_left' , '_right'
4
+
5
+ def __init__ (self , element , left = None , right = None ):
6
+ self ._element = element
7
+ self ._left = left
8
+ self ._right = right
9
+
10
+
11
+ class BinaryTree :
12
+ def __init__ (self ):
13
+ self ._root = None
14
+
15
+ def maketree (self , element , left , right ):
16
+ self ._root = _Node (element , left ._root , right ._root )
17
+
18
+ # Preorder: RoLR
19
+ # Inorder: LRoR
20
+ # Postorder:LRRo
21
+ def preorder (self , root ):
22
+ if root :
23
+ print (root ._element , end = '-->' )
24
+ self .preorder (root ._left )
25
+ self .preorder (root ._right )
26
+
27
+ def inorder (self , root ):
28
+ if root :
29
+ self .inorder (root ._left )
30
+ print (root ._element , end = '-->' )
31
+ self .inorder (root ._right )
32
+
33
+ def postorder (self , root ):
34
+ if root :
35
+ self .postorder (root ._left )
36
+ self .postorder (root ._right )
37
+ print (root ._element , end = '-->' )
38
+
39
+ def levelorder (self ):
40
+ Q = LinkedListQueue ()
41
+ t = self ._root
42
+ print (t ._element , end = ' ' )
43
+ Q .enqueue (t )
44
+ while not Q .is_empty ():
45
+ t = Q .dequeue ()
46
+ if t ._left :
47
+ print (t ._left ._element , end = ' ' )
48
+ Q .enqueue (t ._left )
49
+ if t ._right :
50
+ print (t ._right ._element , end = ' ' )
51
+ Q .enqueue (t ._right )
52
+
53
+ x = BinaryTree ()
54
+ y = BinaryTree ()
55
+ z = BinaryTree ()
56
+ a = BinaryTree ()
57
+ b = BinaryTree ()
58
+ c = BinaryTree ()
59
+ e = BinaryTree ()
60
+ x .maketree (40 , e , e )
61
+ y .maketree (20 , x , e )
62
+ z .maketree (60 , e , e )
63
+ a .maketree (50 , e , z )
64
+ b .maketree (30 , a , e )
65
+ c .maketree (10 , y , b )
66
+ print ('Preorder Traversal' )
67
+ c .preorder (c ._root )
68
+ print ('\n Inorder Traversal' )
69
+ c .inorder (c ._root )
70
+ print ('\n Postorder Traversal' )
71
+ c .postorder (c ._root )
72
+ print ('\n Level order Traversal' )
73
+ c .levelorder ()
0 commit comments