Try it!
Type commands into the terminal below to interact with a live Binary Search Tree. Supported commands: insert <n>, search <n>, delete <n>, show (prints in-order), quit.
Description
View the source code
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, node, value):
if value < node.value:
if node.left is None:
node.left = Node(value)
else:
self._insert(node.left, value)
else:
if node.right is None:
node.right = Node(value)
else:
self._insert(node.right, value)
def insert(self, value):
if self.root is None:
self.root = Node(value)
else:
self._insert(self.root, value)
def search(self, node, value):
if node is None:
return False
if value == node.value:
return True
if value < node.value:
return self.search(node.left, value)
else:
return self.search(node.right, value)
def _min_value(self, node):
current = node
while current.left is not None:
current = current.left
return current
def delete(self, node, value):
if node is None:
return node
if value < node.value:
node.left = self.delete(node.left, value)
elif value > node.value:
node.right = self.delete(node.right, value)
else:
if node.left is None:
return node.right
elif node.right is None:
return node.left
temp = self._min_value(node.right)
node.value = temp.value
node.right = self.delete(node.right, temp.value)
return node
def in_order(self, node, result=None):
if result is None: result = []
if node:
self.in_order(node.left, result)
result.append(node.value)
self.in_order(node.right, result)
return result
Previous Day
Next Day