劍指offer-二叉搜索樹的後序遍歷序列

輸入一個整數數組,判斷該數組是否是某二叉搜索樹的後序遍歷的結果。若是是則輸出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])
相關文章
相關標籤/搜索