Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixed one sided binary tree issue #51

Merged
merged 1 commit into from
Jan 26, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 28 additions & 6 deletions Trees/BinarySearchTree.py
Original file line number Diff line number Diff line change
@@ -44,23 +44,45 @@ def minValueNode(self, node):

return current

def delete(self, data):
def maxValueNode(self, node):
current = node

# loop down to find the leftmost leaf
while(current.rightChild is not None):
current = current.rightChild

return current


def delete(self, data,root):
''' For deleting the node '''
if self is None:
return None

# if current node's data is less than that of root node, then only search in left subtree else right subtree
if data < self.data:
self.leftChild = self.leftChild.delete(data)
self.leftChild = self.leftChild.delete(data,root)
elif data > self.data:
self.rightChild = self.rightChild.delete(data)
self.rightChild = self.rightChild.delete(data,root)
else:
# deleting node with one child
if self.leftChild is None:

if self == root:
temp = self.minValueNode(self.rightChild)
self.data = temp.data
self.rightChild = self.rightChild.delete(temp.data,root)

temp = self.rightChild
self = None
return temp
elif self.rightChild is None:

if self == root:
temp = self.maxValueNode(self.leftChild)
self.data = temp.data
self.leftChild = self.leftChild.delete(temp.data,root)

temp = self.leftChild
self = None
return temp
@@ -69,7 +91,7 @@ def delete(self, data):
# first get the inorder successor
temp = self.minValueNode(self.rightChild)
self.data = temp.data
self.rightChild = self.rightChild.delete(temp.data)
self.rightChild = self.rightChild.delete(temp.data,root)

return self

@@ -128,7 +150,7 @@ def insert(self, data):

def delete(self, data):
if self.root is not None:
return self.root.delete(data)
return self.root.delete(data,self.root)

def find(self, data):
if self.root:
@@ -189,4 +211,4 @@ def postorder(self):
print('\n\nAfter deleting 10')
tree.delete(10)
tree.inorder()
tree.preorder()
tree.preorder()