文章目录

  • 题目描述
  • 思路 && 代码
    • 1. 递归做法
    • 2. 辅助栈做法
    • 二刷

打卡第四天~昨天没来得及写博客= =

题目描述

  • 无须多言,直接冲思路吧!

思路 && 代码

1. 递归做法

  • 缺点:最差情况下,可能会退化成链表,导致时间复杂度变成 O(n2n^2n2)
  • 但是比较好理解!对于当前序列,根据末尾元素值来找左子树范围 && 右子树范围,然后分别递归进行判断即可~
class Solution {public boolean verifyPostorder(int[] postorder) {// 递归法!return isTree(postorder, 0, postorder.length - 1);}public boolean isTree(int[] postorder, int start, int end) {// 找完了if (start >= end) {return true;}int left = start;// 找左子树while(left < end && postorder[left] < postorder[end]) {left++;}// 找右子树int right = left;while(right < end && postorder[right] > postorder[end]) {right++;}// 右子树临接根才行~return right == end && isTree(postorder, start, left - 1) && isTree(postorder, left, right - 1);}
}

2. 辅助栈做法

  • 相对于上一个做法,这里把时间复杂度稳定在O(nnn),同时做了空间复杂度O(n)的牺牲~
  • 可以结合这个大佬的题解一起理解,有图还是比较便于理解的
  • 这个做法一开始可能有点难理解,可以多跟着画几次图理一理
class Solution {// 辅助栈法!public boolean verifyPostorder(int[] postorder) {// 初始化,把postorder[len - 1]看成无穷的左结点Stack<Integer> stack = new Stack<>();int root = Integer.MAX_VALUE;// 逆向,变成 根 - 右 - 左 的遍历for(int i = postorder.length - 1; i >= 0; i--) {// 左子树结点不能比根 or 根的右子树结点大if(postorder[i] > root) {return false;}// 找到大于当前结点的栈值while(!stack.isEmpty() && stack.peek() > postorder[i]) {// 循环结束时找到 root,途中pop掉的结点无后效性root = stack.pop();}stack.push(postorder[i]);}return true;}
}

二刷

class Solution {public boolean verifyPostorder(int[] postorder) {return judge(postorder, 0, postorder.length - 1);}public boolean judge(int[] postorder, int left, int right) {if(left >= right) {return true;}int leftEnd = left;while(leftEnd < right && postorder[leftEnd] < postorder[right]) {leftEnd++;}int rightEnd = leftEnd;while(rightEnd < right && postorder[rightEnd] > postorder[right]) {rightEnd++;}return rightEnd == right && judge(postorder, left, leftEnd - 1) && judge(postorder, leftEnd, rightEnd - 1);}
}
  • 辅助栈做法:先鸽着,以后有空写。

【LeetCode笔记】剑指 Offer 33. 二叉树的后序遍历序列(Java、递归、栈)相关推荐

  1. 剑指Offer之二叉树的后序遍历序列

    题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 思路 二叉树特点是左侧所有的节点值都比根节点大,右侧都 ...

  2. 剑指offer-二叉搜索树的后序遍历序列

    题目:二叉搜索树的后序遍历序列 题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 思路:二叉搜索树首 ...

  3. 判断某数组是不是二叉树的后序遍历序列 python递归与非递归解法

    python 递归 class Solution:def VerifySquenceOfBST(self, sequence):# write code hereif len(sequence) &l ...

  4. 【LeetCode】剑指 Offer 34. 二叉树中和为某一值的路径

    [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 文章目录 [LeetCode]剑指 Offer 34. 二叉树中和为某一值的路径 package offer;import ja ...

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

    [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 文章目录 [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 package offer;public cl ...

  6. 【LeetCode】剑指 Offer 27. 二叉树的镜像

    [LeetCode]剑指 Offer 27. 二叉树的镜像 文章目录 [LeetCode]剑指 Offer 27. 二叉树的镜像 一.递归法 二.辅助栈(或队列) 一.递归法 根据二叉树镜像的定义,考 ...

  7. 算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)

    文章目录 剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树: 样例 1: 限制: 分析 题解 rust go c++ java python 原题传送门:https://leetcode. ...

  8. 二叉树:通过前序遍历与中序遍历序列输出二叉树的后序遍历序列

    题目描述: 二叉树的前序.中序.后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树: 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树: 后序遍历: ...

  9. 剑指Offer - 面试题33. 二叉搜索树的后序遍历序列(递归)

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

最新文章

  1. Cissp-【第4章 通信与网络安全】-2021-3-14(543页-560页)
  2. Linux 硬件信息命令
  3. Linux下使用SSH、Crontab、Rsync三工具实现数据自动备份
  4. openresty开发系列27--openresty中封装redis操作
  5. PowerSploit脚本
  6. scss百分号操作符的一个使用例子
  7. 未完待续:关于DB Link和SCN,你还需要知道的是...
  8. Java 蓝桥杯 装箱问题
  9. 我的世界java村民繁殖_我的世界:1.14版本刷新几率小的五种村庄,没有村民咋回事?...
  10. ubuntu18.04 ros 使用anaconda创建虚拟环境 python3.7安装 opencv-3.4.6,TensorFlow安装,notebook
  11. 村上隆首场中国直播,火山同传打造“影院级字幕”
  12. Paint方法总结(二):着色渲染器Shader
  13. Android N 调用相册crash- FileUriExposedException
  14. 程序员数学(0)--序言
  15. 省市区三级联动数据库
  16. 计算机九针孔什么接口,db9接口-USBCAN-I设备的DB9针串口头中的针脚是如何定义的-电气资讯 - 电工屋...
  17. html 图片循环轮播,如何在Web端实现动画切换效果一致的无限循环图片轮播?
  18. 神棍节献礼之——URAL1111 Squares(几何)
  19. 将数据以表格的形式保存到pdf中
  20. docker 搭建frp内网穿透以及frp详细使用

热门文章

  1. python封装exe 时间time问题_python模块之datetime
  2. ae中心点重置工具_(精品)AE从小白到大神之路(七)-AE动画—动效常见的设计方法...
  3. python中set index_python中set基础应用
  4. 判断三个数是否能构成三角形_三角形的面积
  5. Windows10+Ubuntu 18.04.2+ROS 安装笔记(SSD单硬盘)下
  6. Android之自定义ViewGroup
  7. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 24丨找到连续区间的开始和结束数字【难度中等】​
  8. Scrapy 下载器 中间件(Downloader Middleware)
  9. Dom4j完整教程~XML文档简单操作
  10. Duplicate Observed Data(复制“被监视数据”)