这个题解使用了中序遍历的思路来判断二叉树是否为有效的二叉搜索树。在二叉搜索树中,如果按照中序遍历的顺序遍历节点,得到的序列应该是严格单调递增的。题解定义了一个 lastValue 变量来记录上一个遍历到的节点的值,在递归遍历的过程中,比较当前节点的值和 lastValue,如果当前节点的值小于等于 lastValue,则说明不满足二叉搜索树的性质,返回 False。如果遍历完整个二叉树,没有返回 False,则说明该二叉树是有效的二叉搜索树。
时间复杂度: O(n)
空间复杂度: O(n)
# 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:
if root is None:
return False
lastValue = float("-inf") # 记录上一个遍历到的节点的值
def helper(root):
nonlocal lastValue
if root is None:
return
if helper(root.left) is False: # 递归遍历左子树
return False
if lastValue >= root.val: # 当前节点的值小于等于上一个节点的值,不满足二叉搜索树的性质
return False
else:
lastValue = root.val # 更新 lastValue 为当前节点的值
if helper(root.right) is False: # 递归遍历右子树
return False
if helper(root) is False:
return False
return True