Код Python для двоичного дерева поиска: реализация и методы

Вот пример реализации двоичного дерева поиска в 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(): выполняет обход двоичного дерева поиска и возвращает список элементов в отсортированном порядке.