23.二叉搜索树的后序遍历序列
问题:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解决:
思想:
后序遍历 的序列中,最后一个数字是树的根节点 ,数组中前面的数字可以分为两部分:第一部分是左子树节点 的值,都比根节点的值小;第二部分 是右子树 节点的值,都比 根 节点 的值大,后面用递归分别判断前后两部分 是否 符合以上原则。
python代码:
# -*- coding:utf-8 -*-
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if(sequence==None or len(sequence)==0):
return False
n=len(sequence)
root=sequence[-1]
for i in range(n):
if(sequence[i]>root):
break
for j in range(i,n):
if(sequence[j]<root):
return False
left=True
if i>0:
left=self.VerifySquenceOfBST(sequence[0:i])
right=True
if(j<n-1):
right=self.VerifySquenceOfBST(sequence[i:n-1])
return left and right