""" Двоичное дерево поиска Узел — словарь: {'name': 'Имя', 'phone': '123', 'left': None, 'right': None}. """ def bst_insert(root: dict|None, name: str, phone: str) -> dict: """Итеративно вставляет, возвращает новый корень (если корень меняется).""" if root == None: return {'name': name, 'phone': phone, 'left': None, 'right': None} # '674' < '722' == True, lol current = root while True: if current['name'] == name: current['phone'] == phone elif current['name'] < name: if current['left'] == None: current['left'] = bst_insert(None, name, phone) return root else: current = current['left'] else: if current['right'] == None: current['right'] = bst_insert(None, name, phone) return root else: current = current['right'] # Увы, это самый лаконичный вариант, который я придумал. def bst_find(root: dict|None, name: str) -> str|None: """Поиск в ширину.""" def bst_delete(root: dict, name: str) -> dict: """Удаление, возвращает новый корень.""" def bst_list_all(root: dict) -> list: """Центрированный обход. Рекурсивно собирает записи в отсортированном порядке."""