forked from UNN/2026-rff_mp
[1] 2-nd version ;)
This commit is contained in:
parent
7b74e7d74b
commit
cee96df005
|
|
@ -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())
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user