leetcode hot100 98. 验证二叉搜索树 medium 递归


二叉搜索树

  1. 左子树所有节点值<根节点值<右子树所有节点值
  2. 左子树是二叉搜索树
  3. 右子树是二叉搜索树

  • 二叉搜索树的BST 定义:左子树 < 根 < 右子树。
  • 中序遍历顺序:左子树 → \rightarrow → 根 → \rightarrow →
    右子树。

即:中序遍历时,可以把二叉搜索树看成一个有序数组。

怎么判断一个数组是有序数组?比较相邻元素的大小即可。


时间复杂度: O ( N ) O(N) O(N)。每个节点访问一次。

空间复杂度: O ( H ) O(H) O(H)。取决于树的高度,也就是递归栈的深度。

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:
    pre = -inf
    # def isValidBST(self, root: Optional[TreeNode]) -> bool:

    # 传入初始值,就能用原函数递归
    def isValidBST(self, root: Optional[TreeNode], low=-float('inf'), high=float('inf')) -> bool:

        if not root:
            return True
    
        
        # 递归时,动态更新左右子树的禁区
        return low < root.val < high and self.isValidBST(root.left, low, root.val) and self.isValidBST(root.right, root.val, high)
相关推荐
想吃火锅10054 天前
【leetcode】121.买卖股票的最佳时机js/c++
算法·leetcode·职场和发展
凌波粒4 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
退休倒计时4 天前
【每日一题】LeetCode 146. LRU 缓存 TypeScript
算法·leetcode·缓存·typescript
小欣加油4 天前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展
凌波粒4 天前
LeetCode--90.子集II(回溯算法)
数据结构·算法·leetcode
凌波粒4 天前
LeetCode--46.全排列(回溯算法)
数据结构·算法·leetcode
吃着火锅x唱着歌4 天前
LeetCode 2530.执行K次操作后的最大分数
数据结构·算法·leetcode
sheeta19984 天前
LeetCode 每日一题笔记 日期:2026.06.16 题目:3612. 字符串特殊符号处理
笔记·算法·leetcode
CoderYanger4 天前
A.每日一题:2095. 删除链表的中间节点
java·数据结构·程序人生·leetcode·链表·面试·职场和发展
青山木4 天前
Hot 100 --- 矩阵置零
线性代数·算法·leetcode·矩阵·哈希算法