zoukankan      html  css  js  c++  java
  • 剑指 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:
            if not postorder:
                return True
            root = postorder[-1]
            for i in range(len(postorder)):  # 找到左子树的区间,此时注意下这样的切分不可能出现左子树中的节点比根节点大
                if postorder[i] > root:
                    break
    
            for j in range(i,len(postorder)):  # 如果右子树中存在比根节点的小的值,那么是不符合条件的
                if postorder[j] < root:
                    return False
    
            return self.verifyPostorder(postorder[:i]) and self.verifyPostorder(postorder[i:-1])  ## 递归检查左子树序列和右子树序列是否同时满足条件
    
    
    
  • 相关阅读:
    VSCode配置Python开发环境
    图像特征——边缘
    关于相机内参中的焦距fx和fy
    摄影变换和仿射变换
    为什么要引入齐次坐标
    链表一
    从小问题看懂链表
    类与对象
    排序一
    数组
  • 原文地址:https://www.cnblogs.com/sandy-t/p/13424052.html
Copyright © 2011-2022 走看看