验证二叉搜索树- python-递归&上下界约束

题目:

思路:

易错点:

  1. 二叉搜索树(BST)要满足的是:**左子树所有节点 < 当前节点 < 右子树所有节点,**而非仅比较直接子节点
  2. 空节点处理:空树是合法的BST
  3. 叶子节点处理:叶子节点是合法的BST

上下界传递:

  1. 左子树的所有节点必须小于当前节点,因此左子树的上界为当前节点值
  2. 右子树的所有节点必须大于当前节点,因此右子树的下界为当前节点值。

空节点处理 :空树是合法 BST,返回True

范围验证:每个节点都要在(lower,upper)上

递归终止条件:任一子树不满足BST条件,返回False

代码:

复制代码
# 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 check(node, lower=float('-inf'), upper=float('inf')):
            if not node:return True
            if node.val <= lower or node.val >= upper:
                return False
            if not check(node.left,lower,node.val):
                return False
            if not check(node.right,node.val,upper):
                return False
            return True
        return check(root)
相关推荐
Mem0rin27 分钟前
前缀和:中心下标与数组乘积
数据结构·算法
Lazionr27 分钟前
list容器详解——双向链表的封装与使用
数据结构·c++·链表·list
漂流瓶jz32 分钟前
UVA-12174 Shuffle的播放记录 题解答案代码 算法竞赛入门经典第二版
数据结构·c++·算法·图论·滑动窗口·算法竞赛入门经典·uva
lingran__1 小时前
C++ 高阶数据结构:红黑树万字详解|完整原理推导 + 插入实现 + 完整性校验【STL 底层】
数据结构·c++·面试·红黑树·二叉搜索树·平衡二叉树·stl底层
moonsims2 小时前
低空量子无人机
前端·数据结构
love_muming2 小时前
二叉树操作全解析:从递归到层序遍历
java·数据结构·算法·二叉树
白狐_79813 小时前
408数据结构第5章:二叉树遍历序列题——技巧、判断与真题型总结
数据结构
Forever Nore15 小时前
学完C语言力扣第一题做不来正常吗
数据结构·算法
旖旎夜光18 小时前
LeetCode 11:盛最多水的容器(双指针问题) —— 题解
数据结构·c++·算法·leetcode·双指针
不一样的故事12620 小时前
芯片设计是一个高度复杂、分工精细的系统工程
数据结构·经验分享