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