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

Posted sandy-t

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 33. 二叉搜索树的后序遍历序列相关的知识,希望对你有一定的参考价值。

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回?true,否则返回?false。假设输入的数组的任意两个数字都互不相同。
参考以下这颗二叉搜索树:

     5
    /    2   6
  /  1   3
示例 1:
输入: [1,6,3,2,5]
输出: false

示例 2:
输入: [1,3,2,6,5]
输出: true?

提示:
数组长度 <= 1000

class Solution:
    def verifyPostorder(self, postorder: List[int]) -> bool:
        """
        :type postorder: List[int]
        :rtype: bool
        """
        if not postorder:
            return True
        def isTree(postorder):
            root = postorder[-1]
            length = len(postorder)
            for i in range(length): # 找到左子树的区间,此时注意下这样的切分不可能出现左子树中的节点比根节点大
                if postorder[i] > root:
                    break
            
            for j in range(i, length-1):# 如果右子树中存在比根节点的小的值,那么是不符合条件的
                if postorder[j] < root:
                    return False

            left = True
            if i > 0:
                left = isTree(postorder[:i])#判断左子树是否符合条件
            right = True
            if i < length -1 :
                right = isTree(postorder[i:-1])#判断右子树是否符合条件
            return left and right
        return isTree(postorder)

以上是关于剑指 Offer 33. 二叉搜索树的后序遍历序列的主要内容,如果未能解决你的问题,请参考以下文章

Java 剑指offer(33) 二叉搜索树的后序遍历序列

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

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

剑指 Offer 33. 二叉搜索树的后序遍历序列(递归,二叉搜索树,后序遍历,Java)

剑指 Offer 33. 二叉搜索树的后序遍历序列(递归,二叉搜索树,后序遍历,Java)

剑指 Offer 33. 二叉搜索树的后序遍历序列-递归分治