📅  最后修改于: 2023-12-03 14:39:36.032000             🧑  作者: Mango
在二叉搜索树(BST)中,对于每个节点,其左子树中的所有节点的值均小于该节点的值,而其右子树的所有节点的值均大于该节点的值。因此,我们可以通过在BST中寻找最大的小于或等于给定值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)。