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

題目

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

思路

後序遍歷序列的根節點爲最後一個值。
搜索樹的左子樹小於根節點,右子樹大於根節點。

代碼

# -*- coding:utf-8 -*-
class Solution:
    def VerifySquenceOfBST(self, sequence):
        # write code here
        if not sequence: return False
        root = sequence[-1]
        leftIndex = -1
        for i in range(len(sequence)):
            if sequence[i] >= root:
                leftIndex = i - 1
                break
        print(sequence, leftIndex, sequence[:leftIndex + 1], sequence[leftIndex + 1: len(sequence) - 1])
        for i in range(leftIndex + 1, len(sequence) - 1):
            if sequence[i] < root:
                return False
        res1 = True; res2 = True
        if leftIndex != -1:
            res1 = self.VerifySquenceOfBST(sequence[:leftIndex + 1])
        if leftIndex + 1 != len(sequence) - 1:
            res2 = self.VerifySquenceOfBST(sequence[leftIndex + 1: len(sequence) - 1])
        return res1 and res2
發佈了572 篇原創文章 · 獲贊 47 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章