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'))
相关推荐
Pyeako3 分钟前
深度学习--BP神经网络&梯度下降&损失函数
人工智能·python·深度学习·bp神经网络·损失函数·梯度下降·正则化惩罚
月挽清风30 分钟前
代码随想录第七天:
数据结构·c++·算法
小O的算法实验室32 分钟前
2026年AEI SCI1区TOP,基于改进 IRRT*-D* 算法的森林火灾救援场景下直升机轨迹规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
摘星编程1 小时前
OpenHarmony环境下React Native:Geolocation地理围栏
python
小郭团队1 小时前
2_1_七段式SVPWM (经典算法)算法理论与 MATLAB 实现详解
嵌入式硬件·算法·硬件架构·arm·dsp开发
充值修改昵称1 小时前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
Deepoch2 小时前
Deepoc数学大模型:发动机行业的算法引擎
人工智能·算法·机器人·发动机·deepoc·发动机行业
浅念-2 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
Hcoco_me2 小时前
大模型面试题84:是否了解 OpenAI 提出的Clip,它和SigLip有什么区别?为什么SigLip效果更好?
人工智能·算法·机器学习·chatgpt·机器人
BHXDML3 小时前
第九章:EM 算法
人工智能·算法·机器学习