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