📅  最后修改于: 2023-12-03 15:12:38.055000             🧑  作者: Mango
本文将介绍'门| GATE CS Mock 2018 |第 43 题',这是门计算机科学和IT的重要考试,本题涉及数据结构和算法的知识。
假设你有一个二叉搜索树,并且你想在其中删除某个特定的节点。你可以采取以下步骤:
你需要编写一个函数来删除二叉搜索树中的指定节点,并返回删除后的根节点。
以下是代码框架:
class Node:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
def deleteNode(root: Node, key: int) -> Node:
pass
其中,root 表示二叉搜索树的根节点,key 表示要删除的节点。
该问题的解决方案可以通过递归方式完成,具体步骤如下:
key
小于根节点,则递归调用函数在根节点的左子树中删除 key
;key
大于根节点,则递归调用函数在根节点的右子树中删除 key
;key
等于根节点,具体步骤如下:该算法的时间复杂度为 O(log n),其中 n 表示二叉搜索树中节点的个数。
本题的参考代码如下:
class Node:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
def findMin(root):
while root.left is not None:
root = root.left
return root
def deleteNode(root: Node, key: int) -> Node:
if root is None:
return None
if key < root.val:
root.left = deleteNode(root.left, key)
elif key > root.val:
root.right = deleteNode(root.right, key)
else:
if root.left is None:
temp = root.right
root = None
return temp
elif root.right is None:
temp = root.left
root = None
return temp
temp = findMin(root.right)
root.val = temp.val
root.right = deleteNode(root.right, temp.val)
return root
该代码包含一个 findMin
函数,用于在右子树中查找要删除的节点的后继节点,从而实现删除节点的功能。