📌  相关文章
📜  BST中最小的数字,它大于或等于N(1)

📅  最后修改于: 2023-12-03 14:59:35.048000             🧑  作者: Mango

在BST中查找大于或等于给定数N的最小数字

当我们需要在二叉搜索树中查找大于或等于给定值N的最小数字时,可以使用以下算法来解决这个问题。

算法
  1. 如果根节点为空,则返回NULL。
  2. 如果当前节点的值等于N,则返回该节点的值。
  3. 如果当前节点的值大于N,则在左子树中查找比N大的最小数字。如果找到了,则返回该数字,否则返回当前节点的值。
  4. 如果当前节点的值小于N,则在右子树中查找比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的最小数字的介绍。