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

二叉搜索树的后序遍历序列(Java) 题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true。否则返回false。假设输入的数组的任意两个数字都互不相同。 思路: 满二叉树:从高到低,除了叶结点外,所有结点的左右结点都存在。 完全二叉树:比满二叉树少几个叶结点,从左向右放子结点。 平衡二叉树:空树或者它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树也都是平衡树。、 二叉... 阅读详情

【题目】

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


【分析】

假设输入数组{5,7,6,9,11,10,8}要判断它是不是二叉搜索树的后序遍历结果,就要结合二叉搜索树特点及后序遍历的方法来判断,后序遍历特点是数组最后一个就是二叉树的根节点,所以由此判断树根结点为8,并且先遍历左子树,再遍历右子树,所以关键在于判断出左子树右子树分界点在哪里。由二叉搜索树左子树小于根节点,右子树大于根节点的特点就可以找到分界点,{5,7,6}皆小于根节点8,所以其为左子树,而{9,11,10}大于根节点,所以为右子树,对左子树,右子树分别利用上述判断方法继续判断即可,一旦右子树中出现小于根节点的,则说明此数组并非为某二叉搜索树的后序遍历结果。

举一范例:{7,4,6,5}
1. 树根节点为5;
2. 数组第一个元素不小于5,说明树没有左子树,只有右子树;
3. 对于{7,4,6}都是右子树结点,理应全都大于5,但是4的存在直接就可以判定,此数组不为后序遍历结果。


【测试代码】

#include<stdio.h>
#include<stdlib.h>

#define false 0
#define true 1

bool VerifySequenceOfBst( int sequence[ ], int length )
{
    if(sequence == NULL || length <= 0)
        return false;

    int root = sequence[ length - 1 ];

    //二叉搜索树中左子树的结点小于根结点
    int i = 0;
    for(  ; i < length - 1 ; ++i)
    {
        if( sequence[i] > root )
             break;
    }
    //在二叉搜索树中右子树的结点大于根结点
    int j = i;
    for(; j < length - 1 ; ++j )
    {
        if( sequence[j] < root )
            return false;
    }
    //判断左子树是不是二叉搜索树
    bool left = true;
    if( i > 0 )
        left = VerifySequenceOfBst( sequence, i );
    //判断右子树是不是二叉搜索书
    bool right = true;
    if( i < length - 1)
        right = VerifySequenceOfBst( sequence + i, length - i - 1 );

    return left & right;
}

void main( )
{
    int s[ ] = {5,7,6,9,11,10,8};
    if( VerifySequenceOfBst( s, 7 ))
        printf("存在一棵二叉搜索书,其后序遍历结果为{5,7,6,9,11,10,8}\n");
    else
        printf("不存在一棵二叉搜索书,其后序遍历结果为{5,7,6,9,11,10,8}\n");

    int s2[ ] = {7,4,6,5};
    if( VerifySequenceOfBst( s2,7 ))
        printf("存在一棵二叉搜索书,其后序遍历结果为{7,4,6,5}\n");
    else
        printf("不存在一棵二叉搜索书,其后序遍历结果为{7,4,6,5}\n");
}

【输出】

这里写图片描述

C++经典面试题100例及答案 答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。答:这样可以提高编译效率,因为分开的话只需要编译一次生成对应的.obj文件后,再次应用该类的地方,这个类就不会被再次编译,从而大大的提高了编译效率。答:这种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。答:常对象是指在任何场合都不能对其成员的值进行修改的对象。答:所谓的回调函数,就是预先在系统的对函数进行注册,让系统知道这个函数的存在,以后,当某个事件发生时,再调用这个函数对事件进行响应。 阅读详情

相关推荐

别再手动写用例了!用AI Agent自动生成测试用例的保姆级实战(附Python代码)

本文详细介绍了如何利用AI Agent技术自动生成测试用例,大幅提升测试工程师的工作效率。通过Python代码实战演示,从环境搭建到核心Agent构建(需求解析、场景挖掘、用例编排),再到与企业工具链(TestRail、Jira)的深度集成,帮助团队实现测试用例的智能化生成与管理。

weixin_30897233的博客 647

二叉搜索树的后序遍历序列(辅助栈 最清晰易懂的可视化讲解)

二叉搜索树的后序遍历序列(辅助栈 最清晰易懂的可视化讲解) 从可视化角度进行分析,最清晰直白的思路,最简洁的代码实现

weixin_43954951的博客 3857

从VBA到Python:探索CODE V API在MTF数据分析中的跨语言实践

本文详细介绍了如何从VBA转向Python,利用CODE V API实现MTF数据分析的高效工作流。通过Python的科学计算库和现代API设计,光学工程师可以大幅提升数据处理和可视化效率,实现自动化报告生成和性能优化。

weixin_29239661的博客 442

【算法修炼之道】——二叉搜索树的后序遍历序列

题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。   题目解析 1、主要意思就是说给你一个序列,你确认下这个序列到底是不是一个二叉搜索树的后序遍历结果; 2、这里稍微讲下,二叉搜索树的概念:根节点为参考,比根节点大的数据在右侧,比根节点小的数据在左侧,叶子节点左子节点比父节点小,右子...

YHJ 433

Visio 2013 Professional密钥安装激活全攻略:版本匹配与故障排查

产品密钥是软件授权体系中的核心凭证,用于验证用户对软件的使用权限。在微软Office产品线中,Visio 2013 Professional采用25位字符的密钥机制,通过联网或电话方式完成激活。正确使用密钥不仅能确保软件功能完整,还能避免因授权问题导致的工作中断。对于企业IT运维和个人用户而言,掌握密钥类型辨析、安装包匹配规则以及激活失败排查方法,是保障老版本软件稳定运行的关键。本文围绕Visio 2013 Professional,详细讲解密钥输入、激活流程及常见错误代码处理,帮助读者高效完成部署与维护。

weixin_28487433的博客 342

分享通达信破解交易接口的使用!

那其实通达信破解交易接口的使用方法比较复杂,这里以MA均线指标为例子,只要理解了这些操作步骤,就可以很容易地使用其他指标包括自己编写的指标来进行交易。委托结果(包含委托编号), 需要分配 1024*1024 字节的空间。委托结果数组, 每项结果需要分配 1024*1024 字节的空间。0: 买入, 1: 卖出, 2: 融资买入, 3: 融券卖出,4: (市价委托)上海五档即成剩撤, 深圳五档即成剩撤。4: 买券还券, 5: 卖券还款, 6: 现券还券。0: 上海限价委托, 深圳限价委托。

1841085904的博客 2360

【每日算法--详细讲解版】二叉搜索树的后序遍历序列

二叉搜索树的后序遍历序列详解版

wondersfan的博客 246

13、核心网络模块:VyOS 设备配置实战

本文详细介绍了如何使用 Ansible 核心网络模块对 VyOS 虚拟设备进行自动化配置,涵盖环境搭建、变量设置、任务编写、playbook 运行及配置验证全过程。通过实际案例展示了 Ansible 在网络设备管理中的强大功能,包括多设备支持、模板化配置、备份回滚等优势,并提供了最佳实践建议与未来发展趋势分析,帮助读者提升网络运维效率。

linux6sysadmin的博客 114

二叉树的先序、中序、后序、层序遍历方式详解,由遍历序列构造二叉树过程详解以及C++代码详细实现

数据结构,二叉树的先序,中序,后序,层序遍历过程详解以及C++代码详细实现;根据遍历序列构造二叉树过程详解以及C++代码详细实现。

weixin_45651616的博客 8577

外骨骼机器人(五):步态分析之正常步态

研究病理步态之前,需要了解正常步态,作为判断标准。但是需要记住两个问题:1.“正常”因人而异,性别、年龄、身体情况都需要考虑在内,因此,需要对不同的个体选择合适的正常标准;2.即使病人的步态与正常步态有某种不同,这也不能说明这是不可取的,也不能说明应该把它变成“正常”步态。许多步态异常是对病人的一些问题的一种补偿,尽管异常,但它们仍然是有用的。步态周期的定义是连续为两次发生重复行走事件之间的时间间隔。尽管可以选择任何事件来定义步态周期,但通常使用一只脚接触地面的瞬间(“初始接触”)是方便的。

行者无疆的博客 1997

【GameFramework框架内置模块】10、本地化(Localization)

本地化(Localization),也就是我们所说的不同地区的语言适配,比如说中文版“你好”,英文版是“Hello”。GameFramework在本地化方面,不仅支持文本的本地化,还支持任意资源的本地化,比如说游戏中释放烟花的特效也可以做出不同地区的版本,使得中文版烟花里面的“新年好”字样的特效,在英文版里面是“Happy New Year”字样的特效。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2305

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

文章目录剑指 Offer 33. 二叉搜索树的后序遍历序列解题思路Java代码扩展题:LeetCode 1008. 前序遍历构造二叉搜索树解题思路Java代码举一反三 剑指 Offer 33. 二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树: 5 / \ 2 6 / \ 1 3 示例 1: 输入: [1,6,3,2,

YouMing_Li的博客 879

解决Gradle中NPM命令失效问题

摘要:本文分析了IntelliJ IDEA中Gradle执行npm命令失败的问题,报错显示"npm"文件不存在。通过确认npm安装路径、检查系统PATH与Gradle环境的差异,提出两种解决方案:1) 在build.gradle中使用npm绝对路径;2) 通过launchctl修改用户PATH。实例展示了如何修改Gradle脚本或系统配置来解决该问题,指出跨平台开发中环境变量配置的重要性。文章为开发者提供了处理类似问题的实用方法。

2501_90323865的博客 91

简单题练习——二叉搜索树的后序遍历序列

题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 输入: 每个测试案例包括2行: 第一行为1个整数n(1 第二行包含n个整数,表示这个数组,数组中的数的范围是[0,100000000]。 输出: 对应每个测试案例,如果输入数组是某二叉搜索树的后序遍历的结果输出Yes,否则输出

小菜鸟的足迹~ 1434

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

二叉搜索树的后序遍历序列1. 问题描述2. 样例说明3.解法一:分治算法思想代码时间空间复杂度分析4. 解法二:栈算法思想代码时间空间复杂度分析 1. 问题描述 2. 样例说明 3.解法一:分治 算法思想 二叉树的后序遍历顺序是:左子树 -> 右子树 -> 根节点,因此序列的最后一个数代表了根节点 因此我们可以将一个序列划分为3段, 左子树+右子树+根, 例如[4, 8, 6, 12, 16, 14, 10]可以根据根节点的值将其划分为左子树[4, 8, 6], 右子树[12, 16,

Concise200的博客 402

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。 数据范围: 节点数量 0≤n≤1000 , 节点上的值满足1≤val≤10^5 ,保证节点上的值各不相同 要求:空间复杂度 O(n) ,时间时间复杂度 O(n^2 ) 提示: 1. 二叉搜索树是指父亲节点大于左子树中的全部节点,但是小于右子树中的全部节点的树。 2. 该题我们约定空树不是二叉搜索树 3. 后序遍历是指按照 “左子树-右子树-根节点”

m0_60867520的博客 622

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

牛客_二叉搜索树的后序遍历序列

题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。假设输入的数组的任意两个数字都互不相同。 补充: 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; (4)没有键值相等的节点 思路: ...

zhangvalue的博客 670

算法—判断二叉搜索树的后序遍历序列

题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 方法1 利用后序遍历序列的性质: 1.最后一个元素是根节点root; 2.除去root后的序列,前面是根节点的左子树left,后面是根节点的右子树right; 3.左子树序列一定都要比root小,右子树序列一定都要比root大. 4.对左子树和右子树的序列同样满足以上三点 代码 public class Solution { public boolean

shengpeizhu的博客 531

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

后序遍历的定义:[左子树][右子树][根节点],简称,左右根 二叉搜索树的定义:左子树所有节点的值小于根节点的值,右子树所有节点的值大于根节点的值。左右子树也分别为二叉搜索树。即:left < root < right 题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树: 5 / \ 2 6 / \ 1 3 示例 1: 输入:

weixin_43659449的博客 163

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

题目描述       输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No;       假设输入的数组的任意两个数字都互不相同。二叉搜索树(BST)的定义       1. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;       2. 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;       3. 任意...

写后端的小学生 1188
上一篇: Binary Sort Tree(BST)
下一篇: 二叉树中和为某一值的路径
心明在线
博客等级 码龄15年 14粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值