输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果,如果是返回true,否则返回false。假设输入的数组的任意两个数字互不相同。
二叉搜索树性质:左子树上的节点值<根节点值<右子树上的节点值,左右子树也为二叉搜索树
后序遍历性质:数组中最后一个元素为根节点 ,前面n-1个元素可分为左子树节点值、右子树节点值两部分
思路:确定数组最后一个元素为根节点,找出分界点,将前n-1个元素分为两部分,其中前半部分为左子树节点值,它们的值都比跟根节点值小;后半部分为右子树节点值,他们的值都比根节点值大。依次递归判断
#
# 后序遍历二叉搜索树
# @param postorder int整型一维数组
# @return bool布尔型
#
class Solution:
def verifyPostorder(self , postorder ):
# write code here
if len(postorder)==0:
return False
if len(postorder)==1:
return True
n = len(postorder)
# 根节点
root = postorder[-1]
i = 0
# 找出分界点
while postorder[i]<root: