题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
# -*- coding:utf-8 -*-
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if len(sequence)==0:
return False
if len(sequence)==3:
if sequence[0]>sequence[2]>sequence[1]:
return False
else:
return True
if len(sequence)==2 or len(sequence)==1:
return True
i=self.find_m(sequence)
if i=='a':
return self.VerifySquenceOfBST(sequence[:-1])
else:
for j in range(i):
if sequence[j]>sequence[-1]:
return False
for j in range(i,len(sequence)):
if sequence[j]<sequence[-1]:
return False
return self.VerifySquenceOfBST(sequence[:i]) and self.VerifySquenceOfBST(sequence[i:-1])
def find_m(self,sequence):
l=0
r=len(sequence)
while l<=r:
m=(l+r)/2
if sequence[m]>sequence[-1]:
if m-1<0:
return 'a'
if sequence[m-1]>sequence[-1]:
r=m
else: #sequence[m-1]<sequence[-1]
return m
else:
if m+1==len(sequence):
return 'a'
if sequence[m+1]>sequence[-1]:
return m+1
else: #sequence[m-1]<sequence[-1]
l=m