From e0e7f9eb57cf76f9b2e4f506c136001de9279e78 Mon Sep 17 00:00:00 2001 From: SerKin0 <71343548+SerKin0@users.noreply.github.com> Date: Sun, 17 May 2026 00:04:06 +0300 Subject: [PATCH] =?UTF-8?q?[1]=20=20=D0=9A=D0=BE=D0=BD=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20=D1=82=D0=BE=D1=87=D0=BA=D0=B0?= =?UTF-8?q?=20(=D0=91=D0=B8=D0=BD=D0=B0=D1=80=D0=BD=D0=BE=D0=B5=20=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B2=D0=BE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- skorohodovsa/task_1/binary_tree.py | 73 +++++++++++++++++++++++++ skorohodovsa/task_1/test/test_task_2.py | 0 2 files changed, 73 insertions(+) create mode 100644 skorohodovsa/task_1/binary_tree.py create mode 100644 skorohodovsa/task_1/test/test_task_2.py diff --git a/skorohodovsa/task_1/binary_tree.py b/skorohodovsa/task_1/binary_tree.py new file mode 100644 index 0000000..ab8f633 --- /dev/null +++ b/skorohodovsa/task_1/binary_tree.py @@ -0,0 +1,73 @@ +from typing import Any, Callable + + +def bst_create_node(name: str, phone: str, left: dict = None, right: dict = None) -> dict: + return { + 'name': name, + 'phone': phone, + 'left': left, + 'right': right + } + + +def comparison_name(name_main: str, name_second: str) -> str: + """Сравнение аргументов + + :param name_main: + :type name_main: str + :param name_second: _description_ + :type name_second: str + :return: _description_ + :rtype: str + """ + return 'right' if name_main >= name_second else 'left' + + +def bst_insert(root: dict, name: str, phone: str) -> dict: + if root is None: + return bst_create_node(name, phone) + + path = comparison_name(root['name'], name) + root[path] = bst_insert(root[path], name, phone) + + return root + + +def bst_create_tree(data: list[dict]) -> dict: + if data is None or len(data) == 0: + raise ValueError("Список пустой!") + base = bst_create_node(**data[0]) + + for var in data[1:]: + bst_insert(base, **var) + + return base + + +def bst_find(root: dict, name: str) -> str | None: + if root is None: + return None + + if root['name'] == name: + return root['phone'] + + path = comparison_name(root['name'], name) + return bst_find(root[path], name) + + +def bst_delete(root, name: str, delete_node: bool = False) -> Any: + if root is None: + return None + + if root['name'] == name: + if delete_node: + root + else: + pass + + path = comparison_name(root['name'], name) + return bst_find(root[path], name) + + +def bst_list_all(root: dict) -> list[dict]: + pass \ No newline at end of file diff --git a/skorohodovsa/task_1/test/test_task_2.py b/skorohodovsa/task_1/test/test_task_2.py new file mode 100644 index 0000000..e69de29