Skip to content
Open
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
86 changes: 86 additions & 0 deletions binary_search_tree.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None

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

def insert(self, value):
"""Insert a value into the BST"""
if self.root is None:
self.root = Node(value)
else:
self._insert_recursive(self.root, value)

def _insert_recursive(self, node, value):
if value < node.value:
if node.left is None:
node.left = Node(value)
else:
self._insert_recursive(node.left, value)
else:
if node.right is None:
node.right = Node(value)
else:
self._insert_recursive(node.right, value)

def search(self, value):
"""Search for a value in the BST"""
return self._search_recursive(self.root, value)

def _search_recursive(self, node, value):
if node is None:
return False
if node.value == value:
return True
elif value < node.value:
return self._search_recursive(node.left, value)
else:
return self._search_recursive(node.right, value)

def inorder_traversal(self):
"""Return inorder traversal of the BST"""
result = []
self._inorder_recursive(self.root, result)
return result

def _inorder_recursive(self, node, result):
if node:
self._inorder_recursive(node.left, result)
result.append(node.value)
self._inorder_recursive(node.right, result)

def find_min(self):
"""Find minimum value in the BST"""
if self.root is None:
return None
current = self.root
while current.left:
current = current.left
return current.value

def find_max(self):
"""Find maximum value in the BST"""
if self.root is None:
return None
current = self.root
while current.right:
current = current.right
return current.value

# Example usage
if __name__ == "__main__":
bst = BinarySearchTree()
values = [50, 30, 70, 20, 40, 60, 80]

for val in values:
bst.insert(val)

print("Inorder traversal:", bst.inorder_traversal())
print("Search 40:", bst.search(40))
print("Search 100:", bst.search(100))
print("Min value:", bst.find_min())
print("Max value:", bst.find_max())