@@ -44,23 +44,45 @@ def minValueNode(self, node):
4444
4545 return current
4646
47- def delete (self , data ):
47+ def maxValueNode (self , node ):
48+ current = node
49+
50+ # loop down to find the leftmost leaf
51+ while (current .rightChild is not None ):
52+ current = current .rightChild
53+
54+ return current
55+
56+
57+ def delete (self , data ,root ):
4858 ''' For deleting the node '''
4959 if self is None :
5060 return None
5161
5262 # if current node's data is less than that of root node, then only search in left subtree else right subtree
5363 if data < self .data :
54- self .leftChild = self .leftChild .delete (data )
64+ self .leftChild = self .leftChild .delete (data , root )
5565 elif data > self .data :
56- self .rightChild = self .rightChild .delete (data )
66+ self .rightChild = self .rightChild .delete (data , root )
5767 else :
5868 # deleting node with one child
5969 if self .leftChild is None :
70+
71+ if self == root :
72+ temp = self .minValueNode (self .rightChild )
73+ self .data = temp .data
74+ self .rightChild = self .rightChild .delete (temp .data ,root )
75+
6076 temp = self .rightChild
6177 self = None
6278 return temp
6379 elif self .rightChild is None :
80+
81+ if self == root :
82+ temp = self .maxValueNode (self .leftChild )
83+ self .data = temp .data
84+ self .leftChild = self .leftChild .delete (temp .data ,root )
85+
6486 temp = self .leftChild
6587 self = None
6688 return temp
@@ -69,7 +91,7 @@ def delete(self, data):
6991 # first get the inorder successor
7092 temp = self .minValueNode (self .rightChild )
7193 self .data = temp .data
72- self .rightChild = self .rightChild .delete (temp .data )
94+ self .rightChild = self .rightChild .delete (temp .data , root )
7395
7496 return self
7597
@@ -128,7 +150,7 @@ def insert(self, data):
128150
129151 def delete (self , data ):
130152 if self .root is not None :
131- return self .root .delete (data )
153+ return self .root .delete (data , self . root )
132154
133155 def find (self , data ):
134156 if self .root :
@@ -189,4 +211,4 @@ def postorder(self):
189211 print ('\n \n After deleting 10' )
190212 tree .delete (10 )
191213 tree .inorder ()
192- tree .preorder ()
214+ tree .preorder ()
0 commit comments