You are on page 1of 5

class Node:

def __init__(self, key):

self.key = key
self.left = None
self.right = None

class BinarySearchTree:
def __init__(self):
self.root = None

def insert(self, key):


self.root = self._insert(self.root, key)

def _insert(self, root, key):


if root is None:
return Node(key)
if key < root.key:
root.left = self._insert(root.left, key)
elif key > root.key:
root.right = self._insert(root.right, key)
return root

def search(self, key):


return self._search(self.root, key)

def _search(self, root, key):


if root is None or root.key == key:
return root
if key < root.key:
return self._search(root.left, key)

return self._search(root.right, key)

def inorder_traversal(self):
result = []
self._inorder_traversal(self.root, result)
return result

def _inorder_traversal(self, root, result):


if root:
self._inorder_traversal(root.left, result)
result.append(root.key)
self._inorder_traversal(root.right, result)

# Example usage:
bst = BinarySearchTree()
keys = [50, 30, 70, 20, 40, 60, 80]

for key in keys:


bst.insert(key)

print("Inorder Traversal:", bst.inorder_traversal())

search_key = 40
if bst.search(search_key):
print(f"{search_key} found in the BST.")
else:

print(f"{search_key} not found in the BST.")

class Node:
def __init__(self, key):
self.key = key
self.left = None
self.right = None

class BinarySearchTree:
def __init__(self):
self.root = None

# ... (insert and other methods)

def delete(self, key):


self.root = self._delete(self.root, key)

def _delete(self, root, key):


if root is None:
return root

if key < root.key:


root.left = self._delete(root.left, key)
elif key > root.key:
root.right = self._delete(root.right, key)
else:
# Node to be deleted found

# Case 1: Node with only one child or no child


if root.left is None:
return root.right
elif root.right is None:
return root.left

# Case 3: Node with two children


root.key = self._get_min_value(root.right)
root.right = self._delete(root.right, root.key)

return root

def _get_min_value(self, node):


while node.left is not None:
node = node.left
return node.key

# Example usage:
bst = BinarySearchTree()
keys = [50, 30, 70, 20, 40, 60, 80]

for key in keys:


bst.insert(key)

print("Inorder Traversal before deletion:", bst.inorder_traversal())


key_to_delete = 50
bst.delete(key_to_delete)

print("Inorder Traversal after deletion:", bst.inorder_traversal())

You might also like