(树)Leetcode98二叉搜索树
Leetcode98二叉搜索树
https://leetcode.cn/problems/validate-binary-search-tree/?envType=study-plan-v2&envId=top-100-liked
二叉搜索树定义
对任意一个节点:
左子树所有节点的值 小于 当前节点
右子树所有节点的值 大于 当前节点
前序遍历
# 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:#左递归更新二叉树的右开区间#根节点要传入正无穷和负无穷def dfs(node,left=float('-inf'),right=float('inf')):if node==None:return Trueif node.val>left and node.val<right:return dfs(node.left,left,node.val) and dfs(node.right,node.val,right)else:return Falsereturn dfs(root)
中序遍历
二叉搜索树中序遍历结果是递增数组
数组递增就是比较相邻数字大小啊
class Solution:def isValidBST(self, root: Optional[TreeNode]) -> bool:self.pre = float('-inf') # 全局共享变量def dfs(node):if not node:return Trueif not dfs(node.left):return Falseif node.val <= self.pre:return Falseself.pre = node.valreturn dfs(node.right)return dfs(root)
后序遍历
知道左右节点的范围(最小值和最大值),反过来判断结点是否合适