From cf00e723075a3d3c16ebdca2b583a5423b85731b Mon Sep 17 00:00:00 2001 From: Pavel Date: Mon, 4 May 2026 23:23:06 +0300 Subject: [PATCH] bst --- romanovpv/task 1/bst.py | 60 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 53 insertions(+), 7 deletions(-) diff --git a/romanovpv/task 1/bst.py b/romanovpv/task 1/bst.py index fe639dc..7d01f28 100644 --- a/romanovpv/task 1/bst.py +++ b/romanovpv/task 1/bst.py @@ -1,15 +1,61 @@ +def bst_create_node(name, phone): + return {'name': name, 'phone': phone, 'left': None, 'right': None} + def bst_insert(root, name, phone): - {'name': name, 'phone': phone, 'left': None, 'right': None} - pass + if root is None: + return bst_create_node(name, phone) + + if name == root['name']: + root['phone'] = phone + elif name < root['name']: + root['left'] = bst_insert(root['left'], name, phone) + else: + root['right'] = bst_insert(root['right'], name, phone) + return root def bst_find(root, name): - pass + if root is None: + return None + if root['name'] == name: + return root['phone'] + if name < root['name']: + return bst_find(root['left'], name) + return bst_find(root['right'], name) + +def _bst_min_value_node(node): + current = node + while current['left'] is not None: + current = current['left'] + return current def bst_delete(root, name): - pass + if root is None: + return None -def bst_delete(root, name): - pass + 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'] + elif root['right'] is None: + return root['left'] + + temp = _bst_min_value_node(root['right']) + root['name'] = temp['name'] + root['phone'] = temp['phone'] + root['right'] = bst_delete(root['right'], temp['name']) + + return root def bst_list_all(root): - pass \ No newline at end of file + def inorder(node, acc): + if node: + inorder(node['left'], acc) + acc.append((node['name'], node['phone'])) + inorder(node['right'], acc) + return acc + + return inorder(root, []) \ No newline at end of file