验证二叉搜索树- 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 小时前
从零开始写算法——链表篇2:从“回文”到“环形”——链表双指针技巧的深度解析
数据结构·算法·链表·回文链表·环形链表
诺....6 小时前
C语言不确定循环会影响输入输出缓冲区的刷新
c语言·数据结构·算法
长安er7 小时前
LeetCode876/141/142/143 快慢指针应用:链表中间 / 环形 / 重排问题
数据结构·算法·leetcode·链表·双指针·环形链表
workflower7 小时前
PostgreSQL 数据库的典型操作
数据结构·数据库·oracle·数据库开发·时序数据库
仰泳的熊猫8 小时前
1140 Look-and-say Sequence
数据结构·c++·算法·pat考试
EXtreme358 小时前
栈与队列的“跨界”对话:如何用双队列完美模拟栈的LIFO特性?
c语言·数据结构·leetcode·双队列模拟栈·算法思维
松涛和鸣8 小时前
29、Linux进程核心概念与编程实战:fork/getpid全解析
linux·运维·服务器·网络·数据结构·哈希算法
hweiyu008 小时前
数据结构:有向图
数据结构