Вот пример реализации двоичного дерева поиска в Python:
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):
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):
return self._search_recursive(self.root, value)
def _search_recursive(self, node, value):
if node is None or node.value == value:
return node
if value < node.value:
return self._search_recursive(node.left, value)
return self._search_recursive(node.right, value)
def delete(self, value):
self.root = self._delete_recursive(self.root, value)
def _delete_recursive(self, node, value):
if node is None:
return node
if value < node.value:
node.left = self._delete_recursive(node.left, value)
elif value > node.value:
node.right = self._delete_recursive(node.right, value)
else:
if node.left is None:
return node.right
elif node.right is None:
return node.left
temp = self._find_min(node.right)
node.value = temp.value
node.right = self._delete_recursive(node.right, temp.value)
return node
def _find_min(self, node):
current = node
while current.left is not None:
current = current.left
return current
def inorder_traversal(self):
elements = []
self._inorder_traversal_recursive(self.root, elements)
return elements
def _inorder_traversal_recursive(self, node, elements):
if node is not None:
self._inorder_traversal_recursive(node.left, elements)
elements.append(node.value)
self._inorder_traversal_recursive(node.right, elements)
Этот код определяет класс Nodeи класс BinarySearchTree. Класс Nodeпредставляет узел в дереве двоичного поиска, а класс BinarySearchTreeпредоставляет методы для выполнения операций с деревом, таких как вставка узлов, поиск значения, удаление узел и выполнение обхода по порядку.
В классе BinarySearchTreeдоступны следующие методы:
insert(value): вставляет узел с заданным значением в двоичное дерево поиска.search(value): ищет узел с заданным значением в дереве двоичного поиска и возвращает его, если он найден.delete(value): удаляет узел с заданным значением из двоичного дерева поиска.inorder_traversal(): выполняет обход двоичного дерева поиска и возвращает список элементов в отсортированном порядке.