题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
二叉搜索树:左节点《根节点《右节点
class Solution:
def verifyPostorder(self, postorder: List[int]) -> bool:
#二叉搜索树:左节点《根节点《右节点
def f(i,j):
if i>=j: #当前元素只有一个
return True
p=i
while postorder[p]<postorder[j]:
p+=1
right=p #找到左右节点的分割线
while postorder[p]>postorder[j]:
p+=1
return p==j and f(i,right-1) and f(right,j-1)
return f(0,len(postorder)-1)
# -*- coding:utf-8 -*-
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if not sequence or len(sequence)<=0:
return False
root=sequence[-1]
i=0
#找出左小右大的分界点i,此时i属于右子树
for node in sequence[:-1]:
if node > root:
break
i+=1
#如果在右子树中有比根节点小的值,直接返回False
for node in sequence[i:-1]:
if node < root:
return False
#判断左子树是否为二叉搜索树
left=True
if i>0:
left=self.VerifySquenceOfBST(sequence[:i])
#判断右子树是否为二叉搜索树
right=True
if i<len(sequence)-1:
right=self.VerifySquenceOfBST(sequence[i:-1])
return left and right