Files
eidp-klausuraufgaben/recursion/recursive_datastructure/solution/search_trees.py

50 lines
1.3 KiB
Python

from typing import Optional
from trees import Node
type BinarySearchTree[T] = Optional[Node[T]]
def insert[T](node: BinarySearchTree[T], value: T) -> BinarySearchTree[T]:
prev = None
curr = node
while curr:
prev = curr
if curr.value > value:
curr = curr.left
else:
curr = curr.right
if prev is None:
return Node(value, None, None)
elif value < prev.value:
prev.left = Node(value, None, None)
else:
prev.right = Node(value, None, None)
return node
def exists[T](node: Optional[Node[T]], value: T) -> bool:
return node and (exists(node.left, value)
if value < node.value
else (value == node.value or exists(node.right, value)))
def remove[T](node: BinarySearchTree[T], value: T) -> BinarySearchTree[T]:
if node is None:
return node
if value < node.value:
node.left = remove(node.left, value)
return node
if value > node.value:
node.right = remove(node.right, value)
return node
if node.right is None:
return node.left
if node.left is None:
return node.right
min_node = node.right
while min_node.left:
min_node = min_node.left
node.value = min_node.value
node.right = remove(node.right, min_node.value)
return node