【算法】【递归篇】【树】第7节:leetcode 98. 验证二叉搜索树(神奇的中序遍历!!!)

本期任务:介绍leetcode中树的几个经典问题的递归解法

【算法】【递归篇】【树】第1节:leetcode 100. 相同的树

【算法】【递归篇】【树】第2节:leetcode 105. 从前序与中序遍历序列构造二叉树

【算法】【递归篇】【树】第3节:leetcode 210. 课程表 II

【算法】【递归篇】【树】第4节:leetcode 236. 二叉树的最近公共祖先

【算法】【递归篇】【树】第5节:leetcode 572. 另一个树的子树

【算法】【递归篇】【树】第6节:leetcode 101. 对称二叉树

【算法】【递归篇】【树】第7节:leetcode 98. 验证二叉搜索树

【算法】【递归篇】【树】第8节:leetcode 102. 二叉树的层序遍历


问题来源

  • 98. 验证二叉搜索树

98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:

输入:
    2
   / \
  1   3
输出: true
示例 2:

输入:
    5
   / \
  1   4
     / \
    3   6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
     根节点的值为 5 ,但是其右子节点值为 4

大佬解析

  • 中序遍历轻松拿下,‍♀️必须秒懂!

中序遍历时,判断当前节点是否大于中序遍历的前一个节点,如果大于,说明满足 BST,继续遍历;否则直接返回 false。


代码

class Solution:
        
    def isValidBST(self, root: TreeNode) -> bool:
        self.pre = -float('inf')
        return self.inorder(root)

    
    def inorder(self, root):
        """中序遍历:BST必定返回一个升序列表,所以后一个数必定大于前一个数"""
        if not root:
            return True

        if not self.inorder(root.left):
            return False

        if root.val <= self.pre:
            return False

        self.pre = root.val

        return self.inorder(root.right)

你可能感兴趣的:(二叉树,递归法,leetcode)