輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷結果。如果是則返回 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)