题目:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解题思路:
对于二叉搜索树的后续遍历结果数组,该数组的最后一个位置是该树的跟节点,则跟节点之前的所有数字可以以根节点为中心,分为左子树序列和右子树序列,且左子树中所有值都比根节点值要小。右子树则相反。若根节点之前的数字不能按上述方式切分,则该树不是二叉搜索树的后序遍历结果,若切分成功,则继续对左子树序列和右子树序列分别递归调用上述方法。
代码:
# -*- coding:utf-8 -*-
class Solution:
def Iteration(self,sequence):
if len(sequence)<=2:
return True
mid = 0
flag = 0
for i in range(len(sequence[:-1])):
if sequence[i]<sequence[-1]:
if flag==1:
return False
mid = i
else:
flag = 1
continue
return self.Iteration(sequence[:mid+1]) and self.Iteration(sequence[mid+1:-1])
def VerifySquenceOfBST(self, sequence):
# write code here
if len(sequence)==0:
return False
else:
return self.Iteration(sequence)