输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
PS:二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
(3)左、右子树也分别为二叉排序树(所以可以递归判断);
特点:左子树结点的值都小于根节点的值,右子树结点的值都大于根节点的值
后序遍历:先后序遍历左子树,再后序遍历右子树,最后访问根节点
所以,后序遍历序列的最后一个值一定是根节点的值。
序列中最后一个数前面的数可以分为两部分:
一部分是左子树节点的值,它们都比根节点的值小;
第二部分是右子树节点的值,它们都比根节点的值要大。
用递归的方法分别判断这两部分是否满足前面说的条件
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if len(sequence)==0:
return False
root = sequence[-1]
i = 0
for node in sequence[:-1]:
if node > root:
break
i += 1
for node in sequence[i:-1]:
if node < root:
return False
left = True
if i > 1:
left = self.VerifySquenceOfBST(sequence[:i])
right = True
if i < len(sequence) - 2 and left:
right = self.VerifySquenceOfBST(sequence[i+1:-1])
return left and right