题目:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解答:
# -*- coding:utf-8 -*-
class Solution:
def VerifySquenceOfBST(self, sequence):
if not sequence:
return False
if len(sequence) <= 2:
return True
return self.check(sequence, 0, len(sequence)-2, len(sequence)-1)
def check(self, sequence, start, end, rootIndex):
root = sequence[rootIndex]
i, j = start, end
while(sequence[i] < root):
i += 1
while(sequence[j] > root):
j -= 1
if j + 1 != i:
return False
if j - 1 > start and i < end - 1:
return self.check(sequence, start, j - 1, j) and self.check(sequence, i, end - 1, end)
if j - 1 <= start and i < end - 1:
return self.check(sequence, i, end - 1, end)
if j - 1 > start and i >= end - 1:
return self.check(sequence, start, j - 1, j)
return True