From b383ed1cdc1e8b777a49e6d7121ddc26d3044235 Mon Sep 17 00:00:00 2001 From: oSTEVEo Date: Sun, 22 Mar 2026 00:39:01 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=20bst=5Finsert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MusinAA/task1/structures/BinaryTree.py | 35 ++++++++++++++++++++------ 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/MusinAA/task1/structures/BinaryTree.py b/MusinAA/task1/structures/BinaryTree.py index aa39c0e..f2e4aad 100644 --- a/MusinAA/task1/structures/BinaryTree.py +++ b/MusinAA/task1/structures/BinaryTree.py @@ -5,16 +5,37 @@ {'name': 'Имя', 'phone': '123', 'left': None, 'right': None}. """ -def bst_insert(root, name, phone): - """Рекурсивно или итеративно вставляет, - возвращает новый корень (если корень меняется).""" +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, name): - ... -def bst_delete(root, name): +def bst_find(root: dict|None, name: str) -> str|None: + """Поиск в ширину.""" + +def bst_delete(root: dict, name: str) -> dict: """Удаление, возвращает новый корень.""" -def bst_list_all(root): +def bst_list_all(root: dict) -> list: """Центрированный обход. Рекурсивно собирает записи в отсортированном порядке.""" \ No newline at end of file