LeetCode(python)98.验证二叉搜索树

题目

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

  • 节点的左子树只包含严格小于当前节点的数。
  • 节点的右子树只包含 严格大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

复制代码
输入:root = [2,1,3]
输出:true

示例 2:

复制代码
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

提示:

  • 树中节点数目范围在[1, 104]
  • -231 <= Node.val <= 231 - 1

思路

1.首先明确二叉搜索树:任意节点的左子树的值 < 当前节点的值;节点的右子树的值 > 当前的值

2.核心思路:递归 + 边界约束

递归遍历每个节点,为每个节点传递合法的取值范围

(1)递归规则:

  • 遍历左子树时,所有的节点都应该小于当前的节点 → 更新左子树上界为当前节点值,下界保持不变
  • 遍历右子树时,所有的节点都应该大于当前的节点 → 更新右子树下界为当前节点值,上界保持不变

(2)终止条件:

  • 当前节点为空 → return True
  • 违背了递归规则 → return False

(3)初始条件:

对于root而言,没有父节点,上下界可设置为节点值的min和max,即-inf, inf

代码

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:
    def isValidBST(self, root: Optional[TreeNode]) -> bool:
        def dfs(node: Optional[TreeNode], low: int, high: int) -> bool:
            if not node: return True   # 空节点,return True
            if node.val <= low or node.val >= high: return False   # 违背了规则,return False
            return dfs(node.left, low, node.val) and dfs(node.right, node.val, high)   # 递归遍历左右子树,并传递合法的取值范围
        return dfs(root, float('-inf'), float('inf'))
相关推荐
天使day10 分钟前
FastAPI快速入门
python·fastapi
databook16 分钟前
用相关性分析消除“冗余特征”
python·机器学习·scikit-learn
Jerry31 分钟前
LeetCode 92. 反转链表 II
算法
骊城英雄41 分钟前
Rust从入门到精通-trait
人工智能·算法·rust
幻想时空1 小时前
地图数据采集
python
梦想不只是梦与想1 小时前
Python 中的类型判断方法
python·type·isinstance
可编程芯片开发1 小时前
基于PI控制算法的pwm直流电机控制系统Simulink建模与仿真
算法
怕浪猫2 小时前
2840亿参数只卖白菜价:DeepSeek V4 Flash 正式版上线,Agent 能力暴涨6倍
人工智能·算法
让学习成为一种生活方式2 小时前
苄基异喹啉生物碱糖基转移酶UGT74AN1晶体--Journal of Agricultural and Food Chemistry
人工智能·算法
alphaTao2 小时前
LeetCode 每日一题 2026/7/27-2026/8/2
python·算法·leetcode