二叉搜索树:BST-Binary Search Tree
1、若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值
2、它的左、右子树也分别为二叉搜索树,是递归定义的
递归
- 初始左子树值域为
[-inf, root.val-1]
,右子树值域为[root.val, inf]
- 每次更新左子树值域为
[minv, root.val - 1]
,右子树值域为[root.val + 1, maxv]
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isValidBST(self, root: TreeNode) -> bool:
# return self.dfs(root, -float('inf'), float('inf'))
return self.dfs(root, - 0x3f3f3f3f3f, 0x3f3f3f3f3f)
def dfs(self, root, minv, maxv):
if not root: return True # 空树也是二叉搜索树
if root.val < minv or root.val > maxv:
return False
return self.dfs(root.left, minv, root.val - 1) and self.dfs(root.right, root.val + 1, maxv)