劍指offer22.二叉搜尋樹的後序遍歷序列
阿新 • • 發佈:2019-01-12
題目描述
輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。
二叉查詢樹(Binary Search Tree),(又:二叉搜尋樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹。
後序遍歷是左右中,所以中間值在最後一位。找到第一位大於中間值的數,之後的應該全部大於中間值,否則錯誤。然後就遞迴分別求解左右了,注意當長度大於2時才需要判斷:
# -*- coding:utf-8 -*-
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if not sequence:
return False
mid, i = sequence[-1], 0
for i in range(len(sequence)):
if sequence[i] > mid:
break
for j in range(i,len(sequence)):
if sequence[j] < mid:
return False
left, right = True, True
if i > 2:
left = self.VerifySquenceOfBST(sequence[:i])
if left and len(sequence)-i > 3:
right = self.VerifySquenceOfBST(sequence[ i:-1])
return left and right