碰到树的问题都要想一下,前序、中序、后序遍历都是怎么做的

https://leetcode.cn/problems/validate-binary-search-tree/description/?envType=problem-list-v2&envId=depth-first-search

  1. 前序写法:先看根是否满足要求,再看左子树是否满足要求,再看右子树是否满足要求

二叉搜索树满足这样一个要求:左子树的值<根的值<右子树的值,因此前序写法中就是不断地去判断当前节点的值是否满足这个要求,不断地在更新左区间和右区间

# 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:
        return self.dfs(root, -inf, inf)
    def dfs(self, node, left, right):
        if node is None:
            return True
        
        data = node.val

        left_re = self.dfs(node.left, left, data)

        right_re = self.dfs(node.right, data, right)

        if left < data < right and left_re and right_re:
            return True
        else:
            return False