Question: Case 1 : Deleting a node with no children Case 2 : Deleting a node with 1 child Case 3 : Deleting a node with

Case 1: Deleting a node with no children
Case 2: Deleting a node with 1 child
Case 3: Deleting a node with 2 children
def __init__(self, value):
self.value = value
self.left = None
self.right = None
class BST:
def __init__(self):
self.root = None
def insert(self, value):
if self.root is None:
self.root = TreeNode(value)
else:
self._insert_recursively(self.root, value)
def _insert_recursively(self, node, value):
if value < node.value:
if node.left is None:
node.left = TreeNode(value)
else:
self._insert_recursively(node.left, value)
elif value > node.value:
if node.right is None:
node.right = TreeNode(value)
else:
self._insert_recursively(node.right, value)
def delete(self, value):
self.root = self._delete_recursively(self.root, value)
def _delete_recursively(self, node, value):
if node is None:
return node
if value < node.value:
node.left = self._delete_recursively(node.left, value)
elif value > node.value:
node.right = self._delete_recursively(node.right, value)
else:
# Case 1: Node with no children (leaf node)
if node.left is None and node.right is None:
return None
# Case 2: Node with one child
elif node.left is None:
return node.right
elif node.right is None:
return node.left
# Case 3: Node with two children
else:
# Get the inorder successor (smallest in the right subtree)
min_larger_node = self._min_value_node(node.right)
node.value = min_larger_node.value
node.right = self._delete_recursively(node.right, min_larger_node.value)
return node
def _min_value_node(self, node):
current = node
while current.left is not None:
current = current.left
return current
def inorder_traversal(self, node):
if node is not None:
self.inorder_traversal(node.left)
print(node.value, end='')
self.inorder_traversal(node.right)
# Example usage
bst = BST()
bst.insert(15)
bst.insert(10)
bst.insert(20)
bst.insert(8)
bst.insert(12)
bst.insert(17)
bst.insert(25)
print("Inorder Traversal before deletion:")
bst.inorder_traversal(bst.root)
print()
# Deleting nodes
bst.delete(8) # Case 1: Deleting a node with no children
bst.delete(10) # Case 2: Deleting a node with one child
bst.delete(20) # Case 3: Deleting a node with two children
print("Inorder Traversal after deletion:")
bst.inorder_traversal(bst.root)
print()

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!