树-二叉搜索树的后序遍历序列-JZ23

二叉搜索树的后序遍历序列 一、需求 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果,如果是则返回true,否则返回false。 假设输入的数组的任意两个数字都互不相同。 二、分治算法 2.1 思路分析 后序遍历:左、右、根。 二叉搜索树:左子树中所有结点的值 < 根结点的值,右子树中所有结点的值 > 根结点的值,其左、右子树也分别为二叉搜索树。 根据二叉树搜索树的定义,可以通过递归判断所有子树的正确性(即其后序遍历是否满足二叉搜索树的定义),若所有子树均正确,则此序列为二叉搜索树的后序遍历... 阅读详情

描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜索树)
示例1

输入: [4,8,6,12,16,14,10]
返回值: true

思路
1.二叉搜索树:左子树全部小于根节点,右子树全部大于根节点
2.后序遍历:左子树 -> 右子树 -> 根节点,做后一个节点是根节点
3.我们可以将一个序列划分为3段, 左子树+右子树+根, 例如[4, 8, 6, 12, 16, 14, 10]可以根据根节点的值将其划分为左子树[4, 8, 6], 右子树[12, 16, 14], 根[10],
4.代码中可以先确定的右子树区间, 因此当左子树区间中出现大于根节点的值时, 序列不合法, 我们再采用分治的思想, 对于每段序列代表的子树, 检查它的左子树和右子树, 当且仅当左右子树都合法时返回true

代码

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence == null || sequence.length == 0) {
            return false;
        }
        return check(sequence, 0, sequence.length - 1);
    }
    //检查数组中left到right是不是二叉搜索树
    public boolean check(int [] sequence, int left, int right) {
        if (left >= right) {
            //只有一个节点
            return true;
        }
        int root = sequence[right];
        int index = right - 1;//定义的左子树的右边界
        while (index >= 0 && sequence[index] > root) {
            index--;
        }
        //检查左子树是否有大于根节点的
        for (int i = left; i <= index; i++) {
            if (sequence[i] > root) {
                return false;
            }
        }
        return check(sequence, left, index) && check(sequence, index+1, right-1);
    }
}
SAP产品合规(Product Compliance)管理—规格主数据 CG02/CG02WB SAP产品合规(Product Compliance)管理—规格主数据概览 CG02/CG02WB 阅读详情

相关推荐

别再瞎猜了!三角形接法PMSM的相电流到底怎么算?实测线电流转换公式与避坑指南

本文深入解析三角形接法永磁同步电机(PMSM)在FOC控制中的相电流计算误区,提供实测线电流转换公式与避坑指南。针对矢量控制系统中常见的√3换算错误,详细阐述正确的电流重构算法、硬件采样要点及软件优化技巧,帮助工程师实现精确控制并避免电机损坏。

weixin_30367873的博客 465

5.9 数据结构——树与森林的遍历

树的遍历(先根遍历、后根遍历、层次遍历)和森林的遍历(先序遍历、中序遍历、后序遍历)

weixin_45523296的博客 5476

MTK Linux Charger驱动分析(二) - power_supply_core.c

的核心作用可以概括为:提供统一的电源管理框架;管理电源设备注册、属性访问、事件通知;封装sysfs 接口和 uevent 通知,屏蔽硬件细节;驱动开发者只需要实现,不关心底层通知和接口细节。简单来说,它是电源子系统的“大脑和中枢”,具体的电池/充电器只是“信息源”。

iTom1900 1488

树/二叉树的遍历及根据先序、中序、后序序列构造二叉树

树和二叉树的不同的遍历方法及实现,和根据先序、中序、后序的遍历来构造确定的二叉树。

Lam1101的博客 6757

ISCC练习题MISC

解题技巧:看最后括号应该是IceCTF,先用了一键解码啥也没有啊,不对不对!好像是字符频率统计,转换网站:http://quipqiup.com/有人给你发了一串信息,你能解开吗?

m0_62737381的博客 1119

开关电源环路学习笔记(1)-为啥要知道传递函数?

做硬件都会接触到开关电源,或多或少会接触到环路补偿。很多兄弟们也提出来让我说说这个,说明大家也都很关心,也说明这个好像有点难。 就我个人而言,我也想搞明白环路这一块,也查了一些资料,视频,不过说实话,一直都还是懵的,感觉很困难。 具体感觉就是,看资料或视频的时候,感觉好像是那么回事。但是撇开之后,就又云里雾里的感觉,总有一些想法没有找到答案。 问题 比如下面我想过的问题: 开关电源有开关,根本就不是一个线性系统,传递函数是咋弄出来的? 系统环路框图的输入量为什么不是Vin,而是参考电压V

weixin_42005993的博客 1万+

数据结构系列文章—树(2)前序、中序、后序遍历

0. 写在最前面 本文转载地址:二叉树前序遍历、中序遍历、后序遍历、层序遍历的直观理解 - 白夜行的狼的博客 复习到二叉树,看到网上诸多博客文章各种绕,记得头晕。个人觉得数学、算法这些东西都是可以更直观简洁地表示,然后被记住的,并不需要靠死记硬背。 本文的程序基本来源于《大话数据结构》,个人感觉是一本非常好的书,推荐去看。 1. 为什么叫前序、后序、中序 一棵二叉树由根结点、左子树和右子树三部分组成,若规定 D、L、R 分别代表遍历根结点、遍历左子树、遍历右子树,则二叉树的遍历方式有 6 种:DL

yx1166的博客 2660

【全开源】旅游系统源码(Uniapp+FastAdmin+ThinkPHP)

通过源码的灵活配置和定制开发,我们可以根据旅游企业的实际需求,快速构建出符合其业务特点的旅游系统。旅游系统源码,作为这一变革的基石,为旅游业的数字化转型提供了强有力的支撑。通过深入研究和应用旅游系统源码,我们能够构建出更加智能、便捷、个性化的旅游服务平台,满足游客日益增长的旅游需求。国际化发展:随着全球化的深入发展,旅游系统源码也将迎来国际化的发展机遇,为国内外游客提供更加便捷、高效的旅游服务。跨界融合:旅游系统源码将与更多领域进行跨界融合,如与交通、餐饮、购物等行业的结合,为游客提供更加丰富的旅游体验。

2401_84413757的博客 2147

树--JZ4重建二叉树JZ17树的子结构JZ18二叉树的镜像JZ22从上往下打印二叉树JZ23二叉搜索树的后序遍历序列

递归、子问题解决方法 JZ4重建二叉树 描述       输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 示例1 输入: [1,2,3,4,5,6,7],[3,2,4,1,6,5,7] 返回值: {1,2,5,3,4,6,7} 代码如下: /** *

qq_45915957的博客 197

Linux 音频驱动(六) ALSA音频驱动之PCM Write数据传递过程

目录1. 前言2. PCM Data Flow3. 总结 1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在Linux 音频驱动(一) ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间不能随便互相访问。因此用户如果播放音频,则需要调用copy_from_user()将用户数据从user spa

_Modest_的博客 1万+

最强解析!CWRU轴承数据集Python实战:从数据加载到模型部署全流程

本文提供了一份完整的CWRU轴承数据集Python实战指南,涵盖从数据加载、预处理、特征工程到模型构建与训练的全流程。详细解析了如何利用1D-CNN、Transformer等深度学习模型进行轴承故障诊断,并介绍了模型评估、可解释性分析以及通过FastAPI部署模型的实用方法,为工业设备智能运维提供了一套可复用的解决方案。

time3的博客 365

JZ23 --- 二叉树搜索树的后序遍历序列

题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 题解: 一个二叉搜索树如下: 其后续遍历序列为 3 4 9 5 12 11 10 我们可以发现,序列的最后一个元素为根结点,而根结点之前的元素,一部分小于根结点,一部分大于根结点。 将分割的左右区间递归处理。 步骤: (1)后序遍历的最后一个结点为根结点 (2)分治,用根结点把序列分为左右区间 (3)只需要不断地确定出左子树区

qq_43632625的博客 411

FPGA实现PID算法

PID 控制器表达式如下(引用某硕士论文 《基于FPGA的PID控制器研究与实现》): 其中,Kp为比例增益,Ti为积分时间常数,Td为微分时间常数,u(t)为控制量,e(t)为偏差。 在数字控制系统中,PID控制规律的实现必须用数值逼近的方法。当采样周期相当短时,用求和代替积分、用后向差分代替微分,使模拟PID离散化变为差分方程。 本文使用并行结构来实现。具有延时小,计算速度快的特点,但需要资源比较多。 利用图3.2所示并行结构实现方法 ,进一步将3.8式分解: ...

nxin168的博客 1万+

二叉排序树的后序遍历序列必然是递增的_JZ23-二叉搜索树的后序遍历序列

1、想法遍历的时候,如果遇到比最后一个元素大的节点,就说明它的前面都比最后一个元素小,该元素后面的所有值都必须大于最后一个值,这两个条件必须都要满足。否则就说明该序列不是二叉树后序遍历。例子: 2 4 3 6 8 7 5 这是一个正确的后序遍历这个例子的特点就是:最后一个元素是 5 ,首先遍历数组,当遍历到6的时候,6前面的值都小于5,如果在6后面的值有一个小于5就不是后序遍历,所以一旦在遍历的时...

weixin_39712611的博客 861

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

剑指OfferJZ23:二叉搜索树的后序遍历序列-java版

剑指OfferJZ23:二叉搜索树的后序遍历序列JZ23:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜索树) JZ23:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜索树) 二叉搜索树特点:对于某个节点,它的左子树都小于当前节点,它的右子树都大于当前

weixin_45992021的博客 1575

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

JZ23 二叉搜索树的后序遍历序列

JZ23 二叉搜索树的后序遍历序列 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜素树) 示例: 输入: [4,8,6,12,16,14,10] 返回值: true 题解: 方法一:递归法: 1.思路: 二叉树的后续遍历:先访问左节点,再访问右节点,最后访问根节点 所以一个后续遍历的数组,最后一位肯定是二叉树的根节点 何为二叉搜索树:左节点必定小于根节点,右节点必

qq_41273406的博客 230

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

JZ23-二叉搜索树的后序遍历序列

【题目描述】 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。 【解法】 //注意点: 1.后续遍历的特点:左子树右子树根节点 2.二叉搜索树的特点:左节点值<父节点值<右节点值 3.由1可知数组的最后一个元素值为父节点 4.所以从左到右先判断值是否小于数组结尾处的值,直到第一个大于结尾处值的元素就是右子树的开始,那么再将左右子树运用递归思想进行判断! class Solution { public

zhangmumu_的博客 246

剑指Offer JZ23 二叉搜索树的后序遍历序列 C++实现

题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。 解题思路 方法一:递归 1、思路:后序遍历顺序:左子树->右子树->根,所以数组最后一个元素是根元素;在二叉搜索树中,根元素一定大于左子树中的任何一个结点,小于右子树中的任何一个结点,因此可以先通过根元素找到左右子树的边界,可以将数组中第一个比根元素大的元素作为边界,然后进行判断: 在该元素的左边,所有元素都已经小于根元素,可以认

weixin_41020287的博客 269

剑指—JZ23二叉搜索树的后序遍历序列

题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 解题思路 递归解法 树的后序遍历方式是左右根,比如对于遍历序列 [4,8,6,12,16,14,10] 那么就可以知道10就是根节点,前面的左子树和右子树需要进一步判断。 二叉平衡树的条件是左子树全部小于根结点,右子树全部大于根节点。对于上述序列,首先找到根节点10,然后从头开始遍历,找到第一个大于10的下标,然后从下标开始到最后的切片序列应该

jianghuia的博客 282

JZ23.二叉搜索树的后序遍历序列

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜素树) 法1:递归 //二叉排序树,满足左子树所有节点<根节点<右子树所有节点 //同时,后续遍历最后一个节点为跟节点 //先取到根节点,然后根据大小关系划分左右子树节点,看看是否满足大小关系。 //递归的在左右子树节点上进行判断 public class Solution {...

齐凯旋的博客 241

【每日一题】JZ23 二叉搜索树的后序遍历序列

当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜索树) 5 / \ 2 6 / \ 1 3 输入: [1,6,3,2,5] 输出: false 解题思路 根据二叉搜索树的定义,可以通过递归,判断所有子树的 正确性 (即其后序遍历是否满足二叉搜索树的定义...

试问道几许 241

《剑指offer》JZ23二叉搜索树的后序遍历序列

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 解析:二叉搜索树:左节点<根节点<右节点; 后序遍历:左右根: 代码: public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if(sequence == null || sequence.length ==...

FamilyLin 281

二叉搜索树的后序遍历序列——JZ23

https://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd?tpId=13&&tqId=11176&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个..

sunshine_YG的专栏 234
上一篇: 树-从上往下打印二叉树-JZ22
下一篇: 树-二叉树中和为某一值的路径-JZ24
whl_program
博客等级 码龄11年 101粉丝 279原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值