描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜索树)
后序遍历是根在后,从左往右。
所以给出一个数组,该数组的最后一位为树的根节点。
又因为在二叉搜索树中,左子树节点小于根节点,右子树节点大于根节点(假设输入的数组的任意两个数字都互不相同)。
这个性质在树的子结构中也适合,所以说左子树的根节点也在左边序列的最后一位,同样的根节点左边的数小于根节点,右边的数大于根节点,以此类推,进行判断,如果条件都符合,那么这个数组确实是某一个二叉搜索树的后序遍历。
讨论组题解:
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if sequence==None or len(sequence)==0:
return False
length=len(sequence)
root=sequence[length-1]
# 在二叉搜索 树中 左子树节点小于根节点
for i in range(length):
if sequence[i]>root:
break
# 二叉搜索树中右子树的节点都大于根节点
for j in range(i,length):
if sequence[j]<root:
return False
# 判断左子树是否为二叉树
left=True
if i>0:
left=self.VerifySquenceOfBST(sequence[0:i])
# 判断 右子树是否为二叉树
right=True
if i<length-1:
right=self.VerifySquenceOfBST(sequence[i:-1])
return left and right