📅  最后修改于: 2023-12-03 14:59:35.048000             🧑  作者: Mango
当我们需要在二叉搜索树中查找大于或等于给定值N的最小数字时,可以使用以下算法来解决这个问题。
以下是该算法的代码:
def find_successor(root, N):
if not root:
return None
if root.val == N:
return root.val
if root.val > N:
left = find_successor(root.left, N)
return left if left else root.val
else:
return find_successor(root.right, N)
该算法的时间复杂度与树的高度成正比,即O(h),其中h是树的高度。在平衡的BST中,h=log(n),其中n是树中节点的数量。因此,在平衡的BST中,该算法的时间复杂度为O(log(n))。
对于BST [5,3,6,2,4,null,null,1],其中5是根节点,以下是该算法的测试示例:
root = TreeNode(5)
root.left = TreeNode(3)
root.right = TreeNode(6)
root.left.left = TreeNode(2)
root.left.right = TreeNode(4)
root.left.left.left = TreeNode(1)
print(find_successor(root, 2)) # Output: 2
print(find_successor(root, 5)) # Output: 5
print(find_successor(root, 4)) # Output: 4
print(find_successor(root, 7)) # Output: None
以上是关于在BST中查找大于或等于给定数N的最小数字的介绍。