给你一个二叉树的根节点
root,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:
- 节点的左子树只包含严格小于当前节点的数。
- 节点的右子树只包含 严格大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3] 输出:true
逻辑
- 初始根节点范围:
(-∞, +∞) - 遍历左孩子:最大值收缩为当前节点值
- 遍历右孩子:最小值收缩为当前节点值
- 一旦越界,不是合法 BST
python
class Solution:
def isValidBST(self, root: Optional[TreeNode]) -> bool:
def check(node, low, high):
if not node:
return True
if node.val <= low or node.val >= high:
return False
return check(node.left, low, node.val) and check(node.right, node.val, high)
return check(root, float("-inf"), float("inf"))
