判断是否为二叉搜索树的后序遍历序列

简介: 二叉树相关练习

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


题目链接:二叉搜索树的后序遍历序列_牛客题霸_牛客网


知识点:

二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树


二叉排序树或者是一棵空树,或者是具有下列性质的二叉树

(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;

(3)左、右子树也分别为二叉排序树;

(4)没有键值相等的节点。


而且这里题目也强调了第四点,任意两个数字都不同,也就是没有键值相等的点。


分析:


已知条件:后序序列最后一个值为root;二叉搜索树左子树值都比root小,右子树值都比root大。

1、确定root;

2、遍历序列(除去root结点),找到第一个大于root的位置,则该位置左边为左子树,右边为右子树;

3、遍历右子树,若发现有小于root的值,则直接返回false;(不用再去遍历左子树确认是否有大于root的值,因为上一步找到第一个大于root值的位置的时候,就已经确认了左边一定全部小于root)

4、分别判断左子树和右子树是否仍是二叉搜索树(即递归步骤1、2、3)。


AC代码:

publicclassSolution {
publicbooleanVerifySquenceOfBST(int [] sequence) {
if (sequence==null||sequence.length==0)    returnfalse;
returnVertify1(sequence, 0, sequence.length-1);
    }
privatebooleanVertify1(int[] a, intstart, intend) {
if (start>=end)    returntrue; // 截止条件可用[4,6,7,5]数据测试inti=start;
while (a[i] <a[end]) {
++i;
        }
for (intj=i; j<end; ++j) {
if (a[j] <a[end])    returnfalse;
        }
returnVertify1(a, start, i-1) &&Vertify1(a, i, end-1);
    }
}

image.gif


================Talk is cheap, show me the code===================

目录
相关文章
|
Java
jdk 8 使用okhttp3 实现 http2
使用jdk8 使用okhttp3 实现http2请求
4366 0
jdk 8 使用okhttp3 实现 http2
|
存储 Java Android开发
Android系统升级的机制概要
Android系统升级的机制概要
966 0
|
机器学习/深度学习 自动驾驶 计算机视觉
目标检测落地必备Trick | 结构化知识蒸馏让RetinaNet再涨4个点
目标检测落地必备Trick | 结构化知识蒸馏让RetinaNet再涨4个点
914 0
SVN的下载与安装
SVN的官网地址:https://tortoisesvn.net/ SVN百度云下载地址:https://pan.baidu.com/s/1c2Mm4BQ SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。
2452 0
|
数据采集 数据可视化 Ubuntu
相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 使用方法
该功能包提供了一个手动校准Livox雷达和相机之间外参的方法,已经在Mid-40,Horizon和Tele-15上进行了验证。其中包含了计算相机内参,获得标定数据,优化计算外参和雷达相机融合应用相关的代码。本方案中使用了标定板角点作为标定目标物,由于Livox雷达非重复性扫描的特点,点云的密度较大,比较易于找到雷达点云中角点的准确位置。相机雷达的标定和融合也可以得到不错的结果。
相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 使用方法
|
10月前
|
人工智能 编解码 算法
《3D植被建模痛点解决:开放世界层级实例化+GPU批处理优化方案》
本文记录开放世界生存游戏“迷雾森林”场景3D植被建模的技术攻坚过程。初期因静态烘焙方案,出现近景纹理拉伸、中景阴影脱节、显存过载闪退等问题,后转向“动态层级实例化”,按空间、模型、材质三维度拆分植被资源,搭建层级参数库。面对实例化数量过载,通过材质分组批处理与GPU实例化优化,将Draw Call从3200次降至210次,帧率回升至58帧。后续开发动态环境响应模块,实现植被随天气调整形态,并优化地形采样算法解决穿模悬浮问题。最终沉淀“四维协同”建模逻辑,还探索AI辅助LOD生成,为开放世界3D资产开发提供可复用路径。
579 6
|
10月前
|
安全 网络安全 Windows
Windows Server 2019 IP黑名单设置,保护云服务器安全
本文介绍如何在Windows Server 2019云服务器上设置IP黑名单,通过防火墙高级安全功能,五步完成入站规则配置,有效拦截恶意IP的扫描与暴力破解,提升服务器安全性。结合云平台安全组可实现双重防护,操作简单、成本低,是保障业务稳定运行的实用技巧。
789 4
|
Shell Android开发
|
Docker Windows 容器
手把手教您在 Windows Server 2019 上使用 Docker
现在,您可以直接用 Windows Server 来运行“纯”Docker 容器,其中所有的容器进程都可以直接在主机操作系统上运行。
27762 1