题目描述
输入一个非空整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
题意:该题描述的不够清楚,构建二叉树的依据是:左子树<当前根<右子树
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.sequence = []
def dfs(self, l, r):
if l >= r:
return True
root = self.sequence[r] # 当前根
idx = None
for idx in range(l, r): # 分割左右子树,左:[l, idx-1] 右:[idx, r-1]
if self.sequence[idx] > root:
break
if self.sequence[idx] < root: # 只有左子树
return self.dfs(l, r-1)
for i in range(idx, r): # 判断右子树是否有小于root,若存在说明右子树不合法
if self.sequence[i] < root:
return False
return self.dfs(l, idx-1) and self.dfs(idx, r-1) # 继续遍历左右子树
def VerifySquenceOfBST(self, sequence):
# write code here
self.sequence = sequence
if not sequence:
return False
return self.dfs(0, len(sequence) - 1)