@@ -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