forked from UNN/2026-rff_mp
[1] Контрольная точка (Бинарное дерево)
This commit is contained in:
parent
83651244fe
commit
e0e7f9eb57
73
skorohodovsa/task_1/binary_tree.py
Normal file
73
skorohodovsa/task_1/binary_tree.py
Normal file
|
|
@ -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
|
||||||
0
skorohodovsa/task_1/test/test_task_2.py
Normal file
0
skorohodovsa/task_1/test/test_task_2.py
Normal file
Loading…
Reference in New Issue
Block a user