【算法】【遞歸篇】【樹】第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. 驗證二叉搜索樹
給定一個二叉樹,判斷其是否是一個有效的二叉搜索樹。

假設一個二叉搜索樹具有如下特徵:

節點的左子樹只包含小於當前節點的數。
節點的右子樹只包含大於當前節點的數。
所有左子樹和右子樹自身必須也是二叉搜索樹。
示例 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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章