From cee96df0058f625437968a038a96bc5ce2569b61 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 3 Sep 2026 01:49:04 +0300 Subject: [PATCH] [1] 2-nd version ;) --- AgapovaDS/docs/data/1-st/phonebook.py | 88 ++++++++++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) diff --git a/AgapovaDS/docs/data/1-st/phonebook.py b/AgapovaDS/docs/data/1-st/phonebook.py index 7b07ea4..edf8d92 100644 --- a/AgapovaDS/docs/data/1-st/phonebook.py +++ b/AgapovaDS/docs/data/1-st/phonebook.py @@ -109,6 +109,82 @@ def ht_list_all(): return all_records + +# BTS +bst_root = None + +def bst_create_node(name, phone): + return {'name': name, 'phone': phone, 'left': None, 'right': None} + +def bst_insert(name, phone): + global bst_root + if bst_root is None: + bst_root = bst_create_node(name, phone) + return + def insert_rec(node): + if name == node['name']: + node['phone'] = phone + elif name < node['name']: + if node['left'] is None: + node['left'] = bst_create_node(name, phone) + else: + insert_rec(node['left']) + else: + if node['right'] is None: + node['right'] = bst_create_node(name, phone) + else: + insert_rec(node['right']) + insert_rec(bst_root) + +def bst_find(name): + def find_rec(node): + if node is None: + return None + if name == node['name']: + return node['phone'] + elif name < node['name']: + return find_rec(node['left']) + else: + return find_rec(node['right']) + return find_rec(bst_root) + +def find_min(node): + while node['left'] is not None: + node = node['left'] + return node + +def bst_delete(name): + global bst_root + def delete_rec(node): + if node is None: + return None + if name < node['name']: + node['left'] = delete_rec(node['left']) + elif name > node['name']: + node['right'] = delete_rec(node['right']) + else: + if node['left'] is None: + return node['right'] + if node['right'] is None: + return node['left'] + min_node = find_min(node['right']) + node['name'] = min_node['name'] + node['phone'] = min_node['phone'] + node['right'] = delete_rec(node['right']) + return node + bst_root = delete_rec(bst_root) + +def bst_list_all(): + result = [] + def inorder(node): + if node is None: + return + inorder(node['left']) + result.append((node['name'], node['phone'])) + inorder(node['right']) + inorder(bst_root) + return result + #Test if __name__ == '__main__': print("=== Тест связного списка ===") @@ -127,6 +203,16 @@ if __name__ == '__main__': ht_insert("Alina", "345-678") ht_insert("Kolia", "111-222") print("Все записи (хеш):", ht_list_all()) - print("Поиск Anna:", ht_find("Kiril")) + print("Поиск Kiril:", ht_find("Kiril")) ht_delete("Kolia") print("После удаления Kolia:", ht_list_all()) + + print("\n=== Тест BST ===") + bst_insert("Kiril", "123-456") + bst_insert("Pavel", "789-012") + bst_insert("Alina", "345-678") + bst_insert("Kolia", "111-222") + print("Все записи (BST):", bst_list_all()) + print("Поиск Pavel:", bst_find("Pavel")) + bst_delete("Pavel") + print("После удаления Pavel:", bst_list_all())