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)
相关推荐
alphaTao8 小时前
LeetCode 每日一题 2026/7/6-2026/7/12
算法·leetcode
想吃火锅10058 小时前
【leetcode】56.合并区间js
算法·leetcode·职场和发展
wabs6668 小时前
关于动态规划【力扣72.编辑距离的思考】
算法·leetcode·动态规划
凌波粒9 小时前
LeetCode--47.全排列 II(回溯算法)
算法·leetcode·职场和发展
凌波粒12 小时前
LeetCode--53. 最大子序和(贪心算法)
算法·leetcode·贪心算法
Hesionberger12 小时前
快速求解完全平方数的最少数量
开发语言·数据结构·python·算法·leetcode·c#
aqiu11111112 小时前
【算法日记 19】LeetCode 1. 两数之和:梦开始的地方,哈希表的降维打击
算法·leetcode·职场和发展
海石1 天前
1563分的简单题,可能就简单在能被暴力AC
算法·leetcode
海石1 天前
1400分的dp汗流浃背之【交替子数组计数】
算法·leetcode
退休倒计时1 天前
【每日一题】LeetCode 437. 路径总和 III TypeScript
算法·leetcode·typescript