@@ -25,12 +25,111 @@ def searchNode(self, nodeValue):
25
25
if self .customList [i ] == nodeValue :
26
26
return "Success"
27
27
return "Value not found"
28
+
29
+ def preOrderTraversal (self , index ):
30
+ '''
31
+ index: is the position where we start to place node value
32
+ In PreOrder:
33
+ RootNode => LeftSubTree => RightSubTree
34
+ Time: O(n); Space: O(n)
35
+ '''
36
+ if index > self .lastUsedIndex :
37
+ return
38
+ print (self .customList [index ])
39
+ self .preOrderTraversal (index * 2 )
40
+ self .preOrderTraversal (index * 2 + 1 )
41
+
42
+ def inOrderTraversal (self , index ):
43
+ '''
44
+ In InOrder:
45
+ LeftSubtree => RootNode => RightSubTree
46
+ '''
47
+ if index > self .lastUsedIndex :
48
+ return
49
+
50
+ self .inOrderTraversal (index * 2 )
51
+ print (self .customList [index ])
52
+ self .inOrderTraversal (index * 2 + 1 )
53
+
54
+ def postOrderTraversal (self , index ):
55
+ '''
56
+ In PostOrder:
57
+ LeftSubTree => RightSubTree => RootNode
58
+ Time: O(n); Space: O(n)
59
+ '''
60
+ if index > self .lastUsedIndex :
61
+ return
62
+
63
+ self .postOrderTraversal (index * 2 )
64
+ self .postOrderTraversal (index * 2 + 1 )
65
+ print (self .customList [index ])
66
+
67
+ # Time: O(n); Space: O(1)
68
+ def levelOrderTraversal (self , index ):
69
+ for i in range (index , self .lastUsedIndex + 1 ):
70
+ print (self .customList [i ])
71
+
72
+ # Delete a node from a Binary Tree
73
+ # Steps:
74
+ # 1. deepest node is lastusedIndex
75
+ # 2. Replace the node to be delete by deepest node
76
+ # 3. Delete a deepest node from binary tree
77
+ # Time: O(n); Space: O(1)
78
+ def deleteNode (self , value ):
79
+ if self .lastUsedIndex == 0 :
80
+ return "There is not any node to delete"
81
+ for i in range (1 , self .lastUsedIndex + 1 ):
82
+ if self .customList [i ] == value :
83
+ self .customList [i ] = self .customList [self .lastUsedIndex ]
84
+ self .customList [self .lastUsedIndex ] = None
85
+ self .lastUsedIndex -= 1
86
+ return "The node has been sucessfully deleted"
87
+
88
+ def deleteEntireBT (self ):
89
+ # set customList to None which will erase entire binary tree
90
+ # Time: O(1); Space: O(1)
91
+ self .customList = None
92
+ return "The BT has been sucessfully deleted"
93
+
94
+
28
95
29
96
BT = BinaryTree (size = 8 )
30
97
print (BT .insertNode ("Gadgets" ))
31
98
print (BT .insertNode ("Ipad" ))
32
99
print (BT .insertNode ("Mobile" ))
33
100
print (BT .insertNode ("IpadEarphone" ))
101
+ print (BT .insertNode ("MobileEarphone" ))
102
+ print (BT .customList )
103
+ '''
104
+
105
+ Gadgets(1)
106
+ / \
107
+ Ipad(2) Mobile(3)
108
+ / \
109
+ / \
110
+ IpadEarphone(4) MobileEarphone(5)
111
+
112
+ In python list looks as:
113
+ [None, 'Gadgets', 'Ipad', 'Mobile','IpadEarphone', 'MobileEarphone', None, None]
114
+ Note: index is the position where we start to place node value
115
+ Use formula: LeftChild = 2*index
116
+ RightChild = 2*index + 1
117
+
118
+ '''
34
119
print ("####" )
35
120
print (BT .searchNode ("Mobile" ))
36
-
121
+ print ("####" )
122
+ BT .preOrderTraversal (1 )
123
+ "Output: Gadgets -> Ipad -> IpadEarphone -> MobileEarphone -> Mobile"
124
+ print ("###" )
125
+ BT .inOrderTraversal (1 )
126
+ "Output: IpadEarphone -> Ipad -> MobileEarphone -> Gadgets -> Mobile"
127
+ print ("###" )
128
+ BT .postOrderTraversal (1 )
129
+ "Output: IpadEarphone -> MobileEarphone -> Ipad -> Mobile-> Gadgets"
130
+ print ("###" )
131
+ BT .levelOrderTraversal (1 )
132
+ print ("####" )
133
+ BT .deleteNode ("MobileEarphone" )
134
+ BT .levelOrderTraversal (1 )
135
+ print (BT .deleteEntireBT ())
0 commit comments