题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
解答
二叉搜索树的两个特征:
1,二叉搜索树的左子树的值都小于根节点的值。
2,二叉搜索树的右子树的值都大于根节点的值。
后续遍历的根节点都是在最后面,所以先根据后续遍历的结构找到二叉搜索树的根和左、右子树,让后使用递归。
# coding:utf-8
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if not sequence:
return False
root = sequence[-1]
i = 0
while i < len(sequence) - 1 and sequence[i] < root:
i += 1
for j in sequence[i:]:
if j < root:
return False
left = True
right = True
if i > 0:
left = self.VerifySquenceOfBST(sequence[:i])
if i < len(sequence)-1:
right = self.VerifySquenceOfBST(sequence[i:len(sequence)-1])
return left and right
结束!