From f6478ee72e4471d3d10fcf97b10758b5a682f8fc Mon Sep 17 00:00:00 2001 From: 4eker <423785z@gmail.com> Date: Mon, 20 Apr 2026 20:20:16 +0300 Subject: [PATCH] [1] update binary tree --- pomelovsd/DataStruct/BinaryTree.py | 38 +++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/pomelovsd/DataStruct/BinaryTree.py b/pomelovsd/DataStruct/BinaryTree.py index f769d99..c2ed808 100644 --- a/pomelovsd/DataStruct/BinaryTree.py +++ b/pomelovsd/DataStruct/BinaryTree.py @@ -1,27 +1,53 @@ def create_node(name,phone): return {"name": name, "phone": phone, "left": None, "right": None} -def dst_insert(root, name, phone): +def bst_insert(root, name, phone): # Случай, если нет узлов if root is None: return create_node(name, phone) # Случай, если узел слева elif name < root["name"]: - root["left"] = dst_insert(root["left"], name, phone) + root["left"] = bst_insert(root["left"], name, phone) # Случай, если узел справа elif name > root["name"]: - root["right"] = dst_insert(root["right"], name, phone) + root["right"] = bst_insert(root["right"], name, phone) # Случай, если мы перезаписываем узел else: root["phone"] = phone return root -def dst_find(root, name): +def bst_find(root, name): if root is None: return None elif root == root["name"]: return root["phone"] elif root < root["name"]: - return dst_find(root["left"], name) + return bst_find(root["left"], name) else: - return dst_find(root["right"],name) \ No newline at end of file + 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 \ No newline at end of file