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