From cf54fc49318f888b3f3906f61988c8e05d82da5e Mon Sep 17 00:00:00 2001 From: lukovnikovde Date: Sat, 2 May 2026 09:58:29 +0000 Subject: [PATCH] [11] adding bst_delete() and bst_list_all --- lukovnikovde/docs/data/DataStructure.py | 75 ++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 3 deletions(-) diff --git a/lukovnikovde/docs/data/DataStructure.py b/lukovnikovde/docs/data/DataStructure.py index 193f834..6c578c4 100644 --- a/lukovnikovde/docs/data/DataStructure.py +++ b/lukovnikovde/docs/data/DataStructure.py @@ -188,7 +188,7 @@ def HashTable(buckest): for _ in range(2): name = Name[rnd.randint(0, len(Name) - 1)] - head = ht_delete(buckest, name) + buckest = ht_delete(buckest, name) print(buckest) print(name, ":", ht_find(buckest, name)) @@ -204,7 +204,7 @@ def bst_insert(root, name, phone): root = {'name': name, 'phone': phone, 'left': None, 'right': None} return root while True: - node = shash_key(running['name']) + node = hash_key(running['name']) sheet = hash_key(name) if node < sheet: if running['right'] is None: @@ -226,7 +226,7 @@ def bst_find(root, name): while running is not None: node = hash_key(running['name']) - sheet = hadh_key(name) + sheet = hash_key(name) if name == running['name']: return running['phone'] elif node < sheet: @@ -235,6 +235,58 @@ def bst_find(root, name): running = running['left'] return None + +def bst_list_all(root, name_list = []): + if root is None: + return + name_list.append((root['name'], root['phone'])) + bst_list_all(root['left'], name_list) + bst_list_all(root['right'], name_list) + name_list = sort_list(name_list) + return name_list + +def bst_delete(root, name): + + running = root + + while running is not None: + node = hash_key(running['name']) + sheet = hash_key(name) + if name == running['name']: + + break + elif node < sheet: + old_running = running + flag = 1 + running = running['right'] + else: + old_running = running + flag = 0 + running = running['left'] + + step = ['left', 'right'] + + if running['left'] is None: + old_running[step[flag]] = running['right'] + return root + + if running['right'] is None: + old_running[step[flag]] = running['left'] + return root + + node_delete = running + old_running = running + running = running['right'] + while running['left'] is not None: + old_running = running + running = running['left'] + + node_delete['name'] = running['name'] + node_delete['phone'] = running['phone'] + old_running['left'] = None + + return root + ################################################################################################# def BinarySearchTree(root): @@ -261,6 +313,23 @@ def BinarySearchTree(root): name = Name[i] print(name, ":", bst_find(root, name)) print("======== END TESTING =============\n\n") + + + print('===================== TESTING BST_LIST_ALL =============') + name_list = bst_list_all(root) + print(*name_list) + print("======== END TESTING =============\n\n") + + + print('========== TESTING HT_DELETE ==========') + + for _ in range(2): + name = Name[rnd.randint(0, len(Name) - 1)] + root = bst_delete(root, name) + + print(root) + print(name, ":", bst_find(root, name)) + print("========= END TESTING ==============\n\n") ################################################################################################