剑指 Offer 33. 二叉搜索树的后序遍历序列
剑指 Offer 33. 二叉搜索树的后序遍历序列
原始题目链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof/
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Aj41mXWj-1650699579247)(ht
解题思路:
二叉搜索树定义: 左子树中所有节点的值 < 根节点的值;右子树中所有节点的值 > 根节点的值;其左、右子树也分别为二叉搜索树。所以先根据后续遍历的数组找到第一个大于根节点的值的索引,这样划分开了左右子树,然后验证左右子树的值是否满足二叉搜索树的性质。然后在递归的调用函数去验证左子树和右子树是否满足二叉搜索树。
代码实现:
class Solution:def verifyPostorder(self, postorder: List[int]) -> bool:# 辅助函数:划分左右子树,即查找第一个大于根节点的索引# 判断左右子树是否满足二叉搜索树的性质:左子树的值都小于根节点的值# 右子树的值都大于根节点的值def helper(l, r):# 当节点数小于等于1的时候即数组只有不大于1个元素的时候# 是满足二叉搜索树的性质的,返回Trueif l >= r:return True# 定义一个用来存储第一个大于根节点的值的索引,初始化为l# 根是数组的最后一个值,因为数组是后序遍历index = lwhile postorder[index] < postorder[r]:index += 1boundary = index# 划分左右子树# 左子树[l, boundary - 1],右子树[boundary, r - 1]# 判断右子树的值是否都大于根节点while postorder[index] > postorder[r]:index += 1# 判断是否index达到最后即所有右子树的节点都大于根节点# 再递归的调用左右子树,达到满足的二叉搜索树的条件return index == r and helper(l, boundary - 1) and helper(boundary, r - 1)return helper(0, len(postorder) - 1)
参考文献:
https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof/solution/mian-shi-ti-33-er-cha-sou-suo-shu-de-hou-xu-bian-6/
剑指 Offer 33. 二叉搜索树的后序遍历序列相关推荐
- 【LeetCode】剑指 Offer 33. 二叉搜索树的后序遍历序列
[LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 文章目录 [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 package offer;public cl ...
- 【超100%解法】剑指 Offer 33. 二叉搜索树的后序遍历序列
立志用最少的代码做最高效的表达 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 示例 1: 输入: ...
- 二叉排序树的后序遍历序列必然是递增的_剑指offer 33——二叉搜索树的后序遍历序列...
本题主要在于考察对二叉搜索树和后序遍历的理解. 原题 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同 ...
- 【分治】剑指 Offer 33. 二叉搜索树的后序遍历序列
题目描述 (中等)输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 参考以下这颗二叉搜索树: 5/ ...
- 2021-08-24剑指 Offer 33. 二叉搜索树的后序遍历序列
将二叉树划分为左右子树,分别对左右子树进行验证是否为二叉树, 根节点的下标为i, 右子树的开端为第一个大于根节点的数字m, 则左边的子树为[0,m-1],右边的子树的下标为[m,i-1] (这个不对, ...
- 剑指offer之二叉搜索树的后序遍历序列
剑指offer之二叉搜索树的后序遍历序列 欢迎关注作者博客 简书传送门 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个 ...
- 剑指offer 33. 二叉搜索树的后序遍历
声明:本系列博客是对何海涛<剑指offer>的关键点总结. 1.问题描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果,如果是返回true,否则返回false.假设输入的数 ...
- 一刷328-递归recur-剑指 Offer 33. 二叉搜索树的后序遍历序列(m)
题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false. 假设输入的数组的任意两个数字都互不相同. ----------- 示例:参考以下这 ...
- 剑指笔记——33.二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No. 假设输入的数组的任意两个数字都互不相同. 思路:在这个题中要注意是二叉搜索树,二叉搜索树满足左 ...
最新文章
- Python构建lassocv模型并输出Rad-score公式
- excel两个下拉框相互关联
- jQuery选择器全集详解
- 【Servlet】Java Serlvet Listener 监听器
- java 访问 网络swf_JAVA访问网络资源
- 【总结】有三AI秋季划图像质量组3月直播讲了哪些内容,为什么解决好底层图像处理问题那么重要...
- mysql 导出表数据到另一张表_yz-Mysql数据库中一个表中的数据导出来到另外一个数据库的表格...
- java 对象访问权限_Java面向对象编程之访问控制权限
- HDU - 2122 Ice_cream’s world III
- PinSAGE有伴了! 快速了解PinnerSAGE模型
- html¥符号代码是什么,html怎么特殊符号赋
- 奇安信代码安全实验室获授华为鲲鹏计算平台漏洞奖励计划合作伙伴
- 火焰传感器的简单使用
- 计算机网络通信模型之cs模式(一)简单的socket
- 前端开发攻略,微信公众号前端开发教程
- SuperSocket实战---使用SuperSocket的FixedHeaderReceiveFilter进行通信
- 8. Android MultiMedia框架完全解析 - prepareAsync的过程分析
- Windows 10 Enterprise LTSB版本
- 跟驰理论 matlab,[经济学]第5章 跟驰理论.ppt
- android wifi传输音乐,让你通过WiFi分享手机上的歌曲,音乐共享软件MyStream十一发布Android版...