LeetcodeMedium-【面試題33. 二叉搜索樹的後序遍歷序列】

輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷結果。如果是則返回 true,否則返回 false。假設輸入的數組的任意兩個數字都互不相同。

參考以下這顆二叉搜索樹:
在這裏插入圖片描述

示例 1:
輸入: [1,6,3,2,5]
輸出: false

示例 2:
輸入: [1,3,2,6,5]
輸出: true

提示:
數組長度 <= 1000

題目鏈接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof/
在這裏插入圖片描述
在這裏插入圖片描述

思路1:遞歸分治

在這裏插入圖片描述
在這裏插入圖片描述

class Solution:
    def verifyPostorder(self, postorder: List[int]) -> bool:
        def fun(i, j):
            if i >= j:
                return True
            m = i
            for t in range(i, j+1): # 檢測區間[i,j], 這樣如果不存在右子樹,則m = j
                m = t
                if postorder[t] > postorder[j]:
                    break    
            #i 判斷右子樹區間是否合理(即都大於根節點)
            for t in range(m, j):
                if postorder[t] < postorder[j]:
                    return False
            # 判斷左子樹和右子樹是否都正確
            return fun(i, m - 1) and fun(m, j - 1)
        return fun(0, len(postorder)-1)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章