📅  最后修改于: 2023-12-03 15:41:09.971000             🧑  作者: Mango
本题要求实现一个二叉查找树中删除结点的函数。
二叉查找树(Binary Search Tree,简称BST)是一种特殊的二叉树,它的每个结点最多有两个子结点,并满足左子树的所有结点的值都小于当前结点的值,右子树的所有结点的值都大于当前结点的值。这个特殊性质使得BST可以快速实现查找、插入和删除结点等操作。
对于要删除的结点,如果其没有子结点(即为叶子结点),只需要将其父结点指向它的指针指向空即可。
如果要删除的结点只有一个子结点,则将其父结点指向它的指针指向其子结点即可。
如果要删除的结点有两个子结点,则需要找到其右子树中最小的结点(该结点一定没有左子树),然后用该结点值替换要删除的结点的值,并将该结点删除。
本题要求实现删除BST中指定值的结点的函数deleteNode。
以下是该函数的代码实现:
def deleteNode(root, key):
if not root:
return None # 如果树为空,直接返回
if root.val == key:
if not root.left:
return root.right
if not root.right:
return root.left
temp = root.right
while temp.left:
temp = temp.left
root.val = temp.val
root.right = deleteNode(root.right, temp.val)
elif root.val > key:
root.left = deleteNode(root.left, key)
else:
root.right = deleteNode(root.right, key)
return root
上述代码中,我们先判断要删除的结点是否为空或者是否为根结点。如果是根结点,则要找到其右子树中最小的结点。如果要删除的结点只有一个子结点,则直接用其子结点替换要删除的结点。如果要删除的结点有两个子结点,则用其右子树中最小的结点的值替换要删除的结点的值,并递归删除该最小结点。
二叉查找树是一种常见的数据结构,在实际的算法应用中非常常见。掌握删除BST结点的方法对于算法工程师来说也是非常重要的。本文介绍了BST中删除结点的原理,并给出了具体的代码实现。