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

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

BST中最大的数字,小于或等于N

在二叉搜索树(BST)中,对于每个节点,其左子树中的所有节点的值均小于该节点的值,而其右子树的所有节点的值均大于该节点的值。因此,我们可以通过在BST中寻找最大的小于或等于给定值N的节点来解决这个问题。

思路

从根节点开始,比较当前节点的值与N的大小关系:

  • 若当前节点的值小于N,则最大的小于或等于N的节点一定在右子树中,我们递归地查找右子树;
  • 若当前节点的值大于等于N,则最大的小于或等于N的节点一定在左子树中,我们递归地查找左子树;
  • 若当前节点的值等于N,则该节点即为最大的小于或等于N的节点。
代码实现
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
 
def searchBST(root: TreeNode, N: int) -> int:
    if not root:
        return None
 
    if root.val == N:
        return root.val
 
    if root.val < N:
        right_res = searchBST(root.right, N)
        if right_res is not None:
            return right_res
        else:
            return root.val
 
    if root.val > N:
        return searchBST(root.left, N)
时间复杂度

在最坏情况下,即找到BST的最大值,遍历整棵树的时间复杂度为O(n),其中n为树的节点数。由于二叉搜索树的基本性质,我们可以在平均情况下获得较好的性能表现。因此,该算法的时间复杂度为O(log n)。

空间复杂度

该算法的空间复杂度由递归过程的栈空间决定,最坏情况下,递归层数为O(n),因此空间复杂度为O(n)。在平均情况下,递归树的深度为O(log n),因此空间复杂度为O(log n)。