输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:
- 边界条件: 当给的列表为空的时候返回False
- 获得列表最后一个元素为根元素
- 获得第一个大于根元素的索引,记得找到后break出循环
- index把列表分左右两部分 左边已经判断过都小于根节点了,不用遍历判断 判断右边的列表是否有小于根节点的就返回False
- 这里用一个flag来记录返回值,默认为真 最后用递归循环划分子问题
# -*- coding:utf-8 -*-
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if not sequence:
return False
rootNum = sequence.pop(-1) #获取后序序列的最后一个 最后一个是根节点
index = None
for i in range(len(sequence)):
if sequence[i] > rootNum:
index = i
break
if index == None: 这里考虑到当列表为递增列表,即前面的元素都大于根节点,说明二叉树只有左子树
return True
leftList = sequence[:index]
rightList = sequence[index:]
flag = True
for i in sequence[index:]:
if i < rootNum:
flag = False
if flag:
return True
else:
return False
return self.VerifySquenceOfBST(leftList) and self.VerifySquenceOfBST(rightList)