1、问题描述
输入一个整数数组,判断该数组是不是二叉搜索树的后序遍历序列。假设数组中没有重复的数字。例如输入数组{5,7,6,9,11,10,8},则该数组是下面这个二叉搜索树的后序遍历序列:
2、解题思路
思路1:在二叉搜索树的后序遍历序列中,最后一个数字是二叉搜索树根节点的值。序列中在根节点前面的数字可以分为两部分,前面部分是左子树节点的值,它们的值都比根节点的要小;后面部分是右子树节点的值,它们都比根节点的值大。
3、代码实现
# -*- coding:utf-8 -*-
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if not sequence:
return False
if len(sequence)==1:
return True
length=len(sequence)
root=sequence[-1]
i=0
while sequence[i]<root:
i=i+1
k=i
for j in range(i, length-1):
if sequence[j] < root:
return False
left_s = sequence[:k]
right_s = sequence[k:length-1]
leftIs = True
rightIs = True
if len(left_s) > 0:
leftIs = self.VerifySquenceOfBST(sequence=left_s)
if len(right_s) > 0:
rightIs = self.VerifySquenceOfBST(sequence=right_s)
return leftIs and rightIs