
二叉搜索树:
- 左子树所有节点值<根节点值<右子树所有节点值
- 左子树是二叉搜索树
- 右子树是二叉搜索树
- 二叉搜索树的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)