【剑指offer】二叉搜索树的后序遍历

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36372879/article/details/84034233

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
二叉搜索树是左子树都比跟小,右子树都比跟大
数组的最后一个数字为root,然后一串比root小的为左子树,一串比root大的为右子树,当右子树中有比root小的返回false,可以用递归的方式判断左子树和右子树


class Solution:
    def VerifyCore(self, sequence, start, end):
        #print(start, end)
        if start == end:
            return True
        root = sequence[end]
        for i in range(start, end + 1):
            if sequence[i] > root:
                break
        for j in range(i, end + 1):
            if sequence[j] < root:
                return False
        left = right = True
        if i > start:
            left = self.VerifyCore(sequence, start, i - 1)
        if i < end - 1:
            right = self.VerifyCore(sequence, i, end - 1)
        return left and right
    def VerifySquenceOfBST(self, sequence):
        # write code here
        if sequence == []:
            return False
        return self.VerifyCore(sequence, 0, len(sequence) - 1)
sequence = [7,4,6,5]
print(Solution().VerifySquenceOfBST(sequence))

猜你喜欢

转载自blog.csdn.net/weixin_36372879/article/details/84034233