leetcode hot100 98. 验证二叉搜索树 medium 递归


二叉搜索树

  1. 左子树所有节点值<根节点值<右子树所有节点值
  2. 左子树是二叉搜索树
  3. 右子树是二叉搜索树

  • 二叉搜索树的BST 定义:左子树 < 根 < 右子树。
  • 中序遍历顺序:左子树 → \rightarrow → 根 → \rightarrow →
    右子树。

即:中序遍历时,可以把二叉搜索树看成一个有序数组。

怎么判断一个数组是有序数组?比较相邻元素的大小即可。


时间复杂度: O ( N ) O(N) O(N)。每个节点访问一次。

空间复杂度: O ( H ) O(H) O(H)。取决于树的高度,也就是递归栈的深度。

python 复制代码
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    pre = -inf
    # def isValidBST(self, root: Optional[TreeNode]) -> bool:

    # 传入初始值,就能用原函数递归
    def isValidBST(self, root: Optional[TreeNode], low=-float('inf'), high=float('inf')) -> bool:

        if not root:
            return True
    
        
        # 递归时,动态更新左右子树的禁区
        return low < root.val < high and self.isValidBST(root.left, low, root.val) and self.isValidBST(root.right, root.val, high)
相关推荐
运筹vivo@1 天前
2657. 找到两个数组的前缀公共数组 | 难度:中等
算法·leetcode·职场和发展·哈希表
叶小鸡1 天前
小鸡玩算法-力扣HOT100-动态规划(下)
算法·leetcode·动态规划
毅炼1 天前
今日LeetCode 摸鱼打卡
java·算法·leetcode
m0_629494731 天前
LeetCode 热题 100-----28. 两数相加
数据结构·算法·leetcode·链表
菜菜的顾清寒1 天前
力扣HOT100(25)环形链表
算法·leetcode·链表
Controller-Inversion1 天前
76. 最小覆盖子串
java·算法·leetcode
_日拱一卒1 天前
LeetCode:437路径总和Ⅲ
算法·leetcode·职场和发展
世纪末的小黑1 天前
【LeetCode自用】LeetCode自用记录贴,题目一:两数之和
数据结构·算法·leetcode
兰令水1 天前
topcode【随机算法题】【2026.5.22打卡-java版本】
java·算法·leetcode
水木流年追梦2 天前
大模型入门-Reward 奖励模型训练
开发语言·python·算法·leetcode·正则表达式