diff --git a/binary_search_tree.py b/binary_search_tree.py new file mode 100644 index 00000000..899b70c7 --- /dev/null +++ b/binary_search_tree.py @@ -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())