From da3aad1c5558b04e2843daae2bd5293e0aea50e5 Mon Sep 17 00:00:00 2001 From: kirill Date: Thu, 16 Apr 2026 01:01:14 +0300 Subject: [PATCH] add bst --- svetlakovkyu/docs/data/01/codes/BST.py | 63 ++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 svetlakovkyu/docs/data/01/codes/BST.py diff --git a/svetlakovkyu/docs/data/01/codes/BST.py b/svetlakovkyu/docs/data/01/codes/BST.py new file mode 100644 index 0000000..b1fb9ae --- /dev/null +++ b/svetlakovkyu/docs/data/01/codes/BST.py @@ -0,0 +1,63 @@ +def bst_insert(root, name, phone): + if root is None: + return {'name': name, 'phone': phone, 'left': None, 'right': None} + if name < root['name']: + root['left'] = bst_insert(root['left'], name, phone) + elif name > root['name']: + root['right'] = bst_insert(root['right'], name, phone) + else: + root['phone'] = phone + return root + + +def bst_find(root, name): + if root is None: + return None + if name == root['name']: + return root['phone'] + + if name < root['name']: + return bst_find(root['left'], name) + else: + return bst_find(root['right'], name) + +def get_min(node): + current = node + while current['left'] is not None: + current = current['left'] + return current + +def bst_delete(root, name): + if root is None: + return None + if name < root['name']: + root['left'] = bst_delete(root['left'], name) + elif name > root['name']: + root['right'] = bst_delete(root['right'], name) + else: + if root['left'] is None: + return root['right'] + if root['right'] is None: + return root['left'] + successor = get_min(root['right']) + root['name'] = successor['name'] + root['phone'] = successor['phone'] + root['right'] = bst_delete(root['right'], successor['name']) + return root + +def bst_list_all(root, res = None): + if res is None: + res = [] + if root is not None: + bst_list_all(root['left'], res) + res.append({'name': root['name'], 'phone': root['phone']}) + bst_list_all(root['right'], res) + #сортировка уже сделана + return res + +#проверка +# root = None +# root = bst_insert(root, "Ivan", "111") +# root = bst_insert(root, "Anna", "222") # Уйдет влево +# root = bst_insert(root, "Zina", "333") # Уйдет вправо +# print(root) \ No newline at end of file