剑指offer-二叉搜索树的后序遍历序列23

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
class Solution:
    def VerifySquenceOfBST(self, sequence):
        # write code here
        rightquence=[]
        leftquence=[]
        length=len(sequence)
        if length==0:
            return False
        root=sequence[length-1]
        i=0
        while i<length-1:
            if sequence[i]>root:
                break
            leftquence.append(sequence[i])
            i+=1
        j=i
        while j<length-1:
            if sequence[j]<root:
                return False
            rightquence.append(sequence[j])
            j+=1
        if len(leftquence)>1:
            self.VerifySquenceOfBST(leftquence)
        if len(rightquence)>1:
            self.VerifySquenceOfBST(rightquence)
        return True

思路:链接:https://www.nowcoder.com/questionTerminal/a861533d45854474ac791d90e447bafd
来源:牛客网

已知条件后序序列最后一个值为root;二叉搜索树左子树值都比root小,右子树值都比root大。
1、确定root;
2、遍历序列(除去root结点),找到第一个大于root的位置,则该位置左边为左子树,右边为右子树;
3、遍历右子树,若发现有小于root的值,则直接返回false;
4、分别判断左子树和右子树是否仍是二叉搜索树(即递归步骤1、2、3)。

猜你喜欢

转载自www.cnblogs.com/zhaiyansheng/p/10415471.html