题目:

思路:
易错点:
- 二叉搜索树(BST)要满足的是:**左子树所有节点 < 当前节点 < 右子树所有节点,**而非仅比较直接子节点
- 空节点处理:空树是合法的BST
- 叶子节点处理:叶子节点是合法的BST
上下界传递:
- 左子树的所有节点必须小于当前节点,因此左子树的上界为当前节点值
- 右子树的所有节点必须大于当前节点,因此右子树的下界为当前节点值。
空节点处理 :空树是合法 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)