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)
相关推荐
Wilber的技术分享20 小时前
【LeetCode高频手撕题 2】面试中常见的手撕算法题(小红书)
笔记·算法·leetcode·面试
IronMurphy21 小时前
【算法三十一】46. 全排列
算法·leetcode·职场和发展
czlczl2002092521 小时前
力扣1911. 最大交替子序列和
算法·leetcode·动态规划
承渊政道1 天前
【优选算法】(实战体会位运算的逻辑思维)
数据结构·c++·笔记·学习·算法·leetcode·visual studio
Frostnova丶1 天前
LeetCode 2573. 找出对应 LCP 矩阵的字符串
算法·leetcode·矩阵
承渊政道1 天前
【优选算法】(实战推演模拟算法的蕴含深意)
数据结构·c++·笔记·学习·算法·leetcode·排序算法
篮l球场1 天前
数组中的第K个最大元素
数据结构·算法·leetcode
篮l球场1 天前
前 K 个高频元素
数据结构·算法·leetcode
_深海凉_1 天前
LeetCode热题100-两数之和
算法·leetcode·职场和发展
阿Y加油吧1 天前
面试硬核双杀!合并 K 个升序链表 + LRU 缓存|力扣高频手撕原题全解
数据结构·leetcode·链表