輸入一個整數數組,判斷該數組是否是某二叉搜索樹的後序遍歷的結果。若是是則輸出Yes,不然輸出No。假設輸入的數組的任意兩個數字都互不相同。數組
二叉搜索樹:spa
它或者是一棵空樹,或者是具備下列性質的二叉樹: 若它的左子樹不空,則左子樹上全部結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上全部結點的值均大於它的根結點的值; 它的左、右子樹也分別爲二叉排序樹。code
# -*- coding:utf-8 -*- class Solution: def VerifySquenceOfBST(self, sequence): # write code here if not sequence: return False if len(sequence) == 1: return True rootValue = sequence[-1] j = 0 while sequence[j] < rootValue: j += 1 if j == len(sequence) - 1: # 說明列表值都小於根節點值,即爲左子樹,沒有右子樹 return True elif sequence[j] > rootValue: for i in range(j, len(sequence)-1): # 判斷右子樹中是否有小於根節點值的 if sequence[i] < rootValue: return False return True # 沒有問題則說明是右子樹 return self.VerifySquenceOfBST(sequence[:j]) and self.VerifySquenceOfBST(sequence[j:len(sequence)-1])