验证二叉搜索树- 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)
相关推荐
小江的记录本5 小时前
【Java基础】泛型:泛型擦除、通配符、上下界限定(附《思维导图》+《面试高频考点清单》)
java·数据结构·后端·mysql·spring·面试·职场和发展
落羽的落羽6 小时前
【算法札记】练习 | Week4
linux·服务器·数据结构·c++·人工智能·算法·动态规划
萑澈7 小时前
算法竞赛入门:C++ STL核心用法与时空复杂度速查手册
数据结构·c++·算法·stl
yuannl108 小时前
数据结构----二叉排序树(ai修改版)
数据结构
iiiiyu8 小时前
集合进阶(Map集合)
java·大数据·开发语言·数据结构·编程语言
小江的记录本9 小时前
【Java基础】核心关键字:final、static、volatile、synchronized、transient(附《思维导图》+《面试高频考点清单》)
java·前端·数据结构·后端·ai·面试·ai编程
go不是csgo10 小时前
两个Redis数据结构搞定签到和UV统计:Bitmap与HyperLogLog实战
数据结构·redis·uv
悠仁さん10 小时前
数据结构 栈与队
数据结构
Plan-C-11 小时前
二叉树的遍历
java·数据结构·算法
历程里程碑11 小时前
54 深入解析poll多路复用技术
java·linux·服务器·开发语言·前端·数据结构·c++