首页 > 其他分享 >剑指 Offer 33. 二叉搜索树的后序遍历序列

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

时间:2023-09-06 17:37:59浏览次数:37  
标签:遍历 false Offer 33 二叉 int stack postorder

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

 

参考以下这颗二叉搜索树:

5
    / \
   2   6
  / \
 1   3

示例 1:

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

示例 2:

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



class Solution {
    public boolean verifyPostorder(int[] postorder) {
        // 单调栈使用,单调递增的单调栈
        Deque<Integer> stack = new LinkedList<>();
        int pervElem = Integer.MAX_VALUE;
        // 逆向遍历,就是翻转的先序遍历
        for (int i = postorder.length - 1;i>=0;i--){
            // 左子树元素必须要小于递增栈被peek访问的元素,否则就不是二叉搜索树
            if (postorder[i] > pervElem){
                return false;
            }
            while (!stack.isEmpty() && postorder[i] < stack.peek()){
                // 数组元素小于单调栈的元素了,表示往左子树走了,记录下上个根节点
                // 找到这个左子树对应的根节点,之前右子树全部弹出,不再记录,因为不可能在往根节点的右子树走了
                pervElem = stack.pop();
            }
            // 这个新元素入栈
            stack.push(postorder[i]);
        }
        return true;
    }
}

标签:遍历,false,Offer,33,二叉,int,stack,postorder
From: https://blog.51cto.com/u_16040716/7388591

相关文章

  • 【Leetcode刷题记录】1、统计参与通信的服务器;2、统计二叉树中好节点的数目;3、从两个
    1、统计参与通信的服务器题目:这里有一幅服务器分布图,服务器的位置标识在 m*n 的整数矩阵网格 grid 中,1表示单元格上有服务器,0表示没有。如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。请你统计并返回能够与至少一台其他服务器进行通信的服务器的......
  • 基于高性能Cortex®-M33内核STM32H562RIV6、STM32H562RIT6、STM32H562RGV6 32-bit ARM
    简介STM32H562xx器件是基于高性能ARM®Cortex®-M3332位RISC内核的高性能微控制器系列(STM32H5系列)。它们的工作频率高达250MHz。Cortex®-M33内核具有单精度浮点单元(FPU)、支持所有ARM®单精度数据处理指令和所有数据类型。该系列微控制器具有1至2MB的Flash存储器、640KB的SRA......
  • 代码随想录算法训练营第十四天|二叉树的递归法、迭代法
    二叉树的递归遍历(前中后序遍历-递归法与迭代法)递归三部曲:确定递归函数的参数和返回值确定终止条件确定单层递归的逻辑递归法对二叉树进行前中后序遍历(力扣144.145.94.)//前序遍历·递归·LC144_二叉树的前序遍历classSolution{publicList<Integer>preorderTra......
  • 剑指 Offer 42. 连续子数组的最大和
    输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1]的和最大,为6。classSolution{publicintmaxSubArray(int[]nums){......
  • 剑指 Offer 43. 1~n 整数中 1 出现的次数(困难)
    题目:classSolution{public:intcountDigitOne(intn){//mulk表示10^k//在下面的代码中,可以发现k并没有被直接使用到(都是使用10^k)//但为了让代码看起来更加直观,这里保留了klonglongmulk=1;intans=0;......
  • 剑指 Offer 41. 数据流中的中位数
    如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4]的中位数是3[2,3]的中位数是(2+3)/2=2.5设计一个支持以下两......
  • 剑指 Offer 20. 表示数值的字符串
    说实话本题虽然不难,但是对边界问题的处理超乎想象(一不小心就越界访问),”简单“的难度还是说明博主本身太菜了。本题的主要考点是双指针以及对标准库(对c++来说)一些函数的运用。处理的中心思想是:先将整个字符串反转,而后再通过双指针提取其中的各个单词,而后再将其反转。这样的处理......
  • 用递归和非递归两种方式实现二叉树的中序遍历
    一、分析中序遍历遍历顺序为:左、根、右。二、递归实现publicclassNode{ publicintvalue;publicNodeleft;publicNoderight;publicNode(intdata){ this.value=data;}}publicvoidinOrderRecur(Nodehead){ if(head==null){ return;}i......
  • 二叉树-257二叉树的所有路径带回溯思想
    257. 二叉树的所有路径1#Definitionforabinarytreenode.2#classTreeNode:3#def__init__(self,val=0,left=None,right=None):4#self.val=val5#self.left=left6#self.right=right7classSolution:8......
  • UOJ33 树上 GCD
    UOJ传送门设\(f_{u,i}\)为\(u\)子树内深度为\(i\)的点的个数,在\(\operatorname{LCA}\)处计算答案。但是时间复杂度无法接受。考虑长剖,计算答案只用枚举到轻链长,先对轻儿子做一遍\(\text{Dirichlet}\)后缀和,重儿子的信息直接继承上来。但是我们没法查询深度\(\bmod......