热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

验证二叉搜索树的序列是否有效(23)

题目要求:给定一个整数数组,判断该数组是否为某一二叉搜索树的后序遍历结果。如果符合,则输出“是”,否则输出“否”。假设输入数组中的所有数字均不相同。此问题需要通过分析数组的特性来验证其是否满足二叉搜索树后序遍历的条件。

题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。
假设输入的数组的任意两个数字都互不相同。

思路:
找住二叉查找树&#xff08;Binary Search Tree,BST)的特点&#xff1a;左子树<根<右子树
使用分治思想和递归思想

package swordToOffer._23_VerifySquenceOfBST;public class Solution {public boolean VerifySquenceOfBST(int [] sequence) {if(sequence.length&#61;&#61;0){return false;}return judge(sequence,0,sequence.length-1);}//用于判断该该子树右子树是否比根结点大&#xff0c;左子树是否比根结点小public boolean judge(int[] seq,int start,int root){//写出递归终止条件,一定是>&#61;&#xff0c;不能只写>&#xff0c;因为当只有左子树时&#xff0c;会出现start>root情况&#xff0c;//具体往下看**处if(start>&#61;root){return true;}int i&#61;start;//从前往后找&#xff0c;找到根结点在序列中的位置&#xff08;此时根节点左边都比根节点小&#xff09;while(i>&#61;start && i<root){//最后一个即为根结点root&#xff0c;如果大于root&#xff0c;则该位置i为右子树序列的开始位置if(seq[i]>seq[root]){break;}i&#43;&#43;;}int boudaryIndex&#61;i;//继续判断根结点右边&#xff0c;应该都要比根节点大。//如果是从后往前找&#xff08;此时根节点右边都比根节点大&#xff09;,要继续判断根节点左边都比根结点小。while(i<root){if(seq[i]<seq[root]){return false;}i&#43;&#43;;}//左右分治&#xff0c;不断递归&#xff0c;直到返回结果//**当只有左子树时&#xff0c;boudaryIndex&#61;root&#xff0c;root-1//会出现start>root情况&#xff0c;由于没有关于start>root的终止操作&#xff0c;此时右半部分会不断递归&#xff0c;直到栈溢出return judge(seq,start,boudaryIndex-1)&& judge(seq,boudaryIndex,root-1);}}


推荐阅读
  • 本题要求实现一个高效的算法,在一个 m x n 的矩阵中搜索目标值 target。该矩阵具有以下特性:每行的元素从左到右按升序排列,每列的元素从上到下按升序排列。 ... [详细]
  • 本文详细介绍了HashSet类,它是Set接口的一个实现,底层使用哈希表(实际上是HashMap实例)。HashSet不保证元素的迭代顺序,并且是非线程安全的。 ... [详细]
  • LeetCode 实战:寻找三数之和为零的组合
    给定一个包含 n 个整数的数组,判断该数组中是否存在三个元素 a、b、c,使得 a + b + c = 0。找出所有满足条件且不重复的三元组。 ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • 本文通过分析一个具体的案例,探讨了64位Linux系统对32位应用程序的兼容性问题。案例涉及OpenVPN客户端在64位系统上的异常行为,通过逐步排查和代码测试,最终定位到了与TUN/TAP设备相关的系统调用兼容性问题。 ... [详细]
  • protobuf 使用心得:解析与编码陷阱
    本文记录了一次在广告系统中使用protobuf进行数据交换时遇到的问题及其解决过程。通过这次经历,我们将探讨protobuf的特性和编码机制,帮助开发者避免类似的陷阱。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文介绍了如何在Linux系统中获取库源码,并在从源代码编译软件时收集所需的依赖项列表。 ... [详细]
  • 现在越来越多的人使用IntelliJIDEA,你是否想要一个好看的IDEA主题呢?本篇博客教你如何设置一个美美哒IDEA主题,你也可以根据 ... [详细]
  • 一个转子曲线面积问题及其反问题的解答
    曾经解答过这样一个问题,从该ID的最后一次登录时间、该ID显示的专业信息,误以为是新闻里某个想不开的同学,不安了一阵子。经确认是我多虑了,不过把问题答案还是写出来。之后就收到一堆要求帮忙算 ... [详细]
  • 第14周实践项目(4)-验证平衡二叉树
    问题**Copyright(c)2015,烟台大学计算机学院*Allrightsreserved.*文件名称:test.cpp*作者:王敏*完成日 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 本文探讨了一种算法问题,即如何高效地将数组中的所有元素向右移动指定数量的位置。提供了详细的示例和解决方案。 ... [详细]
  • 本文探讨了一种统一的语义数据模型,旨在支持物联网、建筑及企业环境下的数据转换。该模型强调简洁性和可扩展性,以促进不同行业间的插件化和互操作性。对于智能硬件开发者而言,这一模型提供了重要的参考价值。 ... [详细]
  • Vulnhub DC3 实战记录与分析
    本文记录了在 Vulnhub DC3 靶机上的渗透测试过程,包括漏洞利用、内核提权等关键步骤,并总结了实战经验和教训。 ... [详细]
author-avatar
Lululingling2002_886
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有