【题目描述】
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
【解题思路】
二叉搜索树的性质是:其左子树中每个节点的值<根节点的值<右子树中每个节点的值。
一个后序遍历序列的最末尾的数字为二叉树的根节点,所以找到第一个小于根节点的位置idx,分出左右子树,如果sequence[:idx]中存在大于根节点的数,则该数组不是二叉搜索树的后序遍历结果,直接返回false,否则,进行递归判断,判断其左右子树是否也是二叉搜索树。用Python实现的代码如下:
# -*- coding:utf-8 -*-
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if len(sequence) == 0:
return
root = sequence[-1]
for i in range(len(sequence)-1 , -1 , -1):
if sequence[i] < root:
for j in range(i, -1, -1):
if sequence[j] > root:
return False
self.VerifySquenceOfBST(sequence[ : i+1])
self.VerifySquenceOfBST(sequence[i+1 : len(sequence)-1])
return True