面试题33:二叉搜索树的后序遍历序列

# -*- coding:utf-8 -*-
class Solution:
    def VerifySquenceOfBST(self, sequence):
        # write code here
        # 先判断边界
        if sequence == []:
            return False
        root = sequence[-1]
        index = None
        del sequence[-1]
        # 先寻找index也就是左右子树的分割index,如果找到分割点后还能遍历到比分割点小的元素,说明不能构成二叉搜索树
        for i in range(len(sequence)):
            if index==None and sequence[i]>root:
                index = i
            if index!=None and sequence[i]<root:
                return False
                
        # 采用递归的方式找左右子树,需要判断sequence[:index]是否为空
        if sequence[:index] == []:
            leftRet = True
        else:
            leftRet = self.VerifySquenceOfBST(sequence[:index])
            
        if sequence[index:] == []:
            rightRet = True
        else:
            rightRet = self.VerifySquenceOfBST(sequence[index:])
        return rightRet and rightRet

  

posted @ 2019-08-15 11:05  lililili——  阅读(195)  评论(0)    收藏  举报