题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解题思路:
二叉搜索树的特征:左儿子<父亲<右儿子
后续遍历:左子树、右子树、根
根据后续遍历的规律,首先可以找到根节点,然后根据左子树上的元素都小于根节点,右子树上的元素都大于根节点,可以分别得到左子树对应的后续遍历序列和右子树对应的后续遍历序列,递归的判断这些序列是否符合规律。
# -*- coding:utf-8 -*-
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if len(sequence) == 0:
return False
return self.verify(sequence)
def verify(self, sequence):
if len(sequence) <= 1:
return True
root = sequence.pop()
i = 0
while i < len(sequence) and sequence[i] < root:
i += 1
if i == len(sequence):
return True
else:
minRight = min(sequence[i:])
if minRight < root:
return False
return self.verify(sequence[:i]) and self.verify(sequence[i:])