劍指offer——python【第23題】二叉搜索樹的后序遍歷序列


題目描述

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM