劍指offer全集詳解python版——二叉搜索樹的後序遍歷序列

題目描述:
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。

思路:

已知條件:後序序列最後一個值爲root;二叉搜索樹左子樹值都比root小,右子樹值都比root大。
1、確定root;
2、遍歷序列(除去root結點),找到第一個大於root的位置,則該位置左邊爲左子樹,右邊爲右子樹;
3、遍歷右子樹,若發現有小於root的值,則直接返回false;
4、分別判斷左子樹和右子樹是否仍是二叉搜索樹(即遞歸步驟1、2、3)。

代碼:

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.time = 0
    def VerifySquenceOfBST(self, sequence):
        # write code here
        if self.time == 0 and len(sequence) == 0:
            return False
        self.time += 1
        if len(sequence) < 2:
            return True
        j = -1
        for i in range(len(sequence)-1):
            if j == -1:
                if sequence[i] > sequence[len(sequence)-1]:
                    j = i
            else:
                if sequence[i] < sequence[len(sequence)-1]:
                    return False
        return self.VerifySquenceOfBST(sequence[:j]) and self.VerifySquenceOfBST(sequence[j:len(sequence)-1])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章