題目描述
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的后序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
解題思路
首先要清楚,這道題不是讓你去判斷一個給定的數組是不是一個(原先)給定的二叉搜索樹的對應后序遍歷的結果,而是判斷一個給定的數組是不是能夠對應到一個具體的二叉搜索樹的后序遍歷結果
所以還是用遞歸的思想。
把數組分成三部分,比如[4,8,6,12,16,14,10],10就是根節點,4,8,6都是左子樹,12,16,14,10都是右子樹,然后針對左右子樹再去判斷是不是符合根節點、左右子樹這一個規律(左子樹都比根節點小,右子樹都比根節點大)
代碼
class Solution: def VerifySquenceOfBST(self,sequence): # write code here if len(sequence)==0: return False index = 0 for i in range(len(sequence)): if sequence[i]>sequence[-1]: index = i break for j in range(i,len(sequence)): if sequence[j]<sequence[-1]: return False left = True right = True if len(sequence[:index])>0: left = self.VerifySquenceOfBST(sequence[:index]) if len(sequence[index:-1])>0: right = self.VerifySquenceOfBST(sequence[index:-1]) return left and right