forked from UNN/2026-rff_mp
[11] adding bst_delete() and bst_list_all
This commit is contained in:
parent
b647f5af59
commit
cf54fc4931
|
|
@ -188,7 +188,7 @@ def HashTable(buckest):
|
||||||
|
|
||||||
for _ in range(2):
|
for _ in range(2):
|
||||||
name = Name[rnd.randint(0, len(Name) - 1)]
|
name = Name[rnd.randint(0, len(Name) - 1)]
|
||||||
head = ht_delete(buckest, name)
|
buckest = ht_delete(buckest, name)
|
||||||
|
|
||||||
print(buckest)
|
print(buckest)
|
||||||
print(name, ":", ht_find(buckest, name))
|
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}
|
root = {'name': name, 'phone': phone, 'left': None, 'right': None}
|
||||||
return root
|
return root
|
||||||
while True:
|
while True:
|
||||||
node = shash_key(running['name'])
|
node = hash_key(running['name'])
|
||||||
sheet = hash_key(name)
|
sheet = hash_key(name)
|
||||||
if node < sheet:
|
if node < sheet:
|
||||||
if running['right'] is None:
|
if running['right'] is None:
|
||||||
|
|
@ -226,7 +226,7 @@ def bst_find(root, name):
|
||||||
|
|
||||||
while running is not None:
|
while running is not None:
|
||||||
node = hash_key(running['name'])
|
node = hash_key(running['name'])
|
||||||
sheet = hadh_key(name)
|
sheet = hash_key(name)
|
||||||
if name == running['name']:
|
if name == running['name']:
|
||||||
return running['phone']
|
return running['phone']
|
||||||
elif node < sheet:
|
elif node < sheet:
|
||||||
|
|
@ -235,6 +235,58 @@ def bst_find(root, name):
|
||||||
running = running['left']
|
running = running['left']
|
||||||
|
|
||||||
return None
|
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):
|
def BinarySearchTree(root):
|
||||||
|
|
@ -261,6 +313,23 @@ def BinarySearchTree(root):
|
||||||
name = Name[i]
|
name = Name[i]
|
||||||
print(name, ":", bst_find(root, name))
|
print(name, ":", bst_find(root, name))
|
||||||
print("======== END TESTING =============\n\n")
|
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")
|
||||||
|
|
||||||
|
|
||||||
################################################################################################
|
################################################################################################
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user