验证二叉搜索树
碰到树的问题都要想一下,前序、中序、后序遍历都是怎么做的
https://leetcode.cn/problems/validate-binary-search-tree/description/?envType=problem-list-v2&envId=depth-first-search
- 前序写法:先看根是否满足要求,再看左子树是否满足要求,再看右子树是否满足要求
二叉搜索树满足这样一个要求:左子树的值<根的值<右子树的值,因此前序写法中就是不断地去判断当前节点的值是否满足这个要求,不断地在更新左区间和右区间
# 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