版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36372879/article/details/84034233
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
二叉搜索树是左子树都比跟小,右子树都比跟大
数组的最后一个数字为root,然后一串比root小的为左子树,一串比root大的为右子树,当右子树中有比root小的返回false,可以用递归的方式判断左子树和右子树
class Solution:
def VerifyCore(self, sequence, start, end):
#print(start, end)
if start == end:
return True
root = sequence[end]
for i in range(start, end + 1):
if sequence[i] > root:
break
for j in range(i, end + 1):
if sequence[j] < root:
return False
left = right = True
if i > start:
left = self.VerifyCore(sequence, start, i - 1)
if i < end - 1:
right = self.VerifyCore(sequence, i, end - 1)
return left and right
def VerifySquenceOfBST(self, sequence):
# write code here
if sequence == []:
return False
return self.VerifyCore(sequence, 0, len(sequence) - 1)
sequence = [7,4,6,5]
print(Solution().VerifySquenceOfBST(sequence))