剑指Offer-33 二叉搜索树的后序遍历序列

题目:

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

解答:

# -*- coding:utf-8 -*-
class Solution:
    def VerifySquenceOfBST(self, sequence):
        if not sequence:
            return False
        if len(sequence) <= 2:
            return True
        return self.check(sequence, 0, len(sequence)-2, len(sequence)-1)
    def check(self, sequence, start, end, rootIndex):
        root = sequence[rootIndex]
        i, j = start, end
        while(sequence[i] < root):
            i += 1
        while(sequence[j] > root):
            j -= 1
        if j + 1 != i:
            return False
        if j - 1 > start and i < end - 1:
            return self.check(sequence, start, j - 1, j) and self.check(sequence, i, end - 1, end)
        if j - 1 <= start and i < end - 1:
            return self.check(sequence, i, end - 1, end)
        if j - 1 > start and i >= end - 1:
            return self.check(sequence, start, j - 1, j)
        return True

猜你喜欢

转载自blog.csdn.net/u013796880/article/details/84786740