📅  最后修改于: 2023-12-03 15:12:37.561000             🧑  作者: Mango
本题来自2021年印度门考试,是套装2中的第19题。该题目考查的是二叉搜索树的删除操作,要求在O(h)的时间复杂度内删除给定元素,并保持二叉搜索树的特性不变。
二叉搜索树的删除操作分为三种情况。
直接将该节点删除即可。
将要删除的节点的子节点替换到要删除的节点位置即可。
将该节点的右子树中最小的节点替换到该节点位置,并将该右子树中最小节点删除。可以用递归实现此操作。
具体实现可以参考如下程序代码:
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
class BST:
def __init__(self):
self.root = None
def delete(self, root, key):
if not root:
return root
if root.val > key:
root.left = self.delete(root.left, key)
elif root.val < key:
root.right = self.delete(root.right, key)
else:
if not root.left:
temp = root.right
root = None
return temp
elif not root.right:
temp = root.left
root = None
return temp
temp = self.getMin(root.right)
root.val = temp.val
root.right = self.delete(root.right, temp.val)
return root
def getMin(self, node):
while node and node.left:
node = node.left
return node
本题考查的是二叉搜索树的删除操作,需要掌握二叉搜索树的性质以及删除操作的实现方式。对于情况3,需要用到递归实现,需要注意程序的时间复杂度。在实际工作中,二叉搜索树的应用非常广泛,掌握该算法具有重要意义。