2026-rff_mp/pomelovsd/DataStruct/BinaryTree.py
2026-04-20 20:20:16 +03:00

53 lines
1.9 KiB
Python

def create_node(name,phone):
return {"name": name, "phone": phone, "left": None, "right": None}
def bst_insert(root, name, phone):
# Случай, если нет узлов
if root is None:
return create_node(name, phone)
# Случай, если узел слева
elif 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
elif root == root["name"]:
return root["phone"]
elif root < root["name"]:
return bst_find(root["left"], name)
else:
return bst_find(root["right"],name)
def bst_delete(root, name):
if root is None:
return None
elif root < root["name"]:
return bst_delete(root["left"], name)
elif root > root["name"]:
return bst_delete(root["right"], name)
# Узел, который надо удалить
else:
# Если нет потомков
if (root["left"] and root["right"]) is None:
return None
# Если есть только левый потомок
if root["left"] is None:
return root["right"]
# Если есть только правый потомок
if root["right"] is None:
return root["left"]
if (root["left"] or root["right"]) is None:
while current and current['left']:
current = current['left']
root["name"] = current["name"]
root["phone"] = current["phone"]
root["right"] = bst_delete(root["right"],current["name"])
return root