立志用最少的代码做最高效的表达


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

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

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

提示:
数组长度 <= 1000


第一部分:操作:
1、遍历序列,直到某值大于根节点值,以此位置为界限分出左子树和右子树。
2、遍历右子树的值,如果有值小于根节点值,说明该树不是BST,返回false。

第二部分:终止条件:
1、当左子树节点个数大于0时,进行左子树的递归;反之终止。
2、当右子树节点个数大于0时,进行右子树的递归;反之终止。

第三部分:递归:
分别递归左子树和右子树

第四部分:优化:
LC中给出的方法参数带有数组,这样传参效率很低,因此重新构建一个方法,以位置做参数,同时将数组设置为成员变量,这样可以大大提高效率。


class Solution {int[] postOrder;public boolean verifyPostorder(int[] postorder) {if(postorder.length == 0) return true;postOrder = postorder;return verifyPostOrder(0, postOrder.length-1);}public boolean verifyPostOrder(int l, int r) {int rootValue = postOrder[r];int i;           // 根的值for(i = l; i < r; ++i) {        // 因为r的位置是根节点位置,因此不需遍历到rif(postOrder[i] > rootValue) break;}int j;for(j = i; j < r; ++j) {if(postOrder[j] < rootValue) return false;}// 判断左子树是否为二叉搜索树boolean left = true;if(i-l > 0) left = verifyPostOrder(l, i-1);// 判断右子树是否为二叉搜索树boolean right = true;if(j-i > 0) right = verifyPostOrder(i, j-1);// 当左子树和右子树都满足,才返回truereturn (left && right);}
}

举一反三
如果要求处理一棵二叉树的遍历序列,则可以先找到该二叉树的根节点,基于根节点拆分成左子树的子序列和右子树的子序列,接下来再递归的处理这两个子序列。

【超100%解法】剑指 Offer 33. 二叉搜索树的后序遍历序列相关推荐

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

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

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

    剑指 Offer 33. 二叉搜索树的后序遍历序列 原始题目链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian- ...

  3. 二叉排序树的后序遍历序列必然是递增的_剑指offer 33——二叉搜索树的后序遍历序列...

    本题主要在于考察对二叉搜索树和后序遍历的理解. 原题 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同 ...

  4. 【分治】剑指 Offer 33. 二叉搜索树的后序遍历序列

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

  5. 2021-08-24剑指 Offer 33. 二叉搜索树的后序遍历序列

    将二叉树划分为左右子树,分别对左右子树进行验证是否为二叉树, 根节点的下标为i, 右子树的开端为第一个大于根节点的数字m, 则左边的子树为[0,m-1],右边的子树的下标为[m,i-1] (这个不对, ...

  6. 剑指offer之二叉搜索树的后序遍历序列

    剑指offer之二叉搜索树的后序遍历序列 欢迎关注作者博客 简书传送门 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个 ...

  7. 剑指offer 33. 二叉搜索树的后序遍历

    声明:本系列博客是对何海涛<剑指offer>的关键点总结. 1.问题描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果,如果是返回true,否则返回false.假设输入的数 ...

  8. 一刷328-递归recur-剑指 Offer 33. 二叉搜索树的后序遍历序列(m)

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

  9. 剑指笔记——33.二叉搜索树的后序遍历序列

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

最新文章

  1. etcd 笔记(05)— etcd 代码结构、各模块功能、整体架构、各模块之间的交互、请求和应答流程
  2. DL之模型调参:深度学习算法模型优化参数之对深度学习模型的超参数采用网格搜索进行模型调优(建议收藏)
  3. 正儿八经的详细讲java内部类
  4. 电脑键盘上每个键作用
  5. jenkins 备份配置信息
  6. 小计C/C++问题(1)
  7. Excel 枢纽图(Pivot)快速入门与示例
  8. Python 操作 Azure Blob Storage
  9. web安全深度剖析知识点总结
  10. entOS查看系统信息-CentOS查看命令
  11. 【vuejs面试题】务必熟知的vuejs面试题「务必收藏」
  12. 从stm32转向Linux,STM32MP1Distrib
  13. AI根据代码内容自动起函数名,再也不怕命名不规范的同事了|开源
  14. js获取某年某月某天是第几周
  15. mysql在线检测文件是否损坏,mysql数据文件损坏后的修复方法
  16. day16-17-18.对象序列化和反序列化、API获取数据、python操作Excel/CSV文件、类、面向对象编程(初级及进阶)、继承
  17. 元数据与数据治理|apache-atlas2.0.0 源码编译和安装部署(CHD版本)
  18. winpe修复改linux工具,利用WinPE修改原系统注册表来修复系统
  19. UEStudio高亮查找字符串
  20. hadoop-2.6下载地址

热门文章

  1. [翻译]QUIC 与 HTTP/3:太过庞大而致失败?-- 论导致 QUIC 失败的因素
  2. AWS 用户指南笔记
  3. MySQL(七)关于MySQL不同版本下临键锁锁定范围不同
  4. 并发环境下,先操作数据库还是先操作缓存?
  5. Linux AV1硬件视频解码将支持Intel Tiger Lake
  6. AOM联盟:AV1完成1.0版定稿
  7. 动态规划——坐标型位操作型
  8. Hive安装及常用交互命令
  9. 百度Java电面一面面经
  10. Hadoop之OutputFormat数据输出详解