热门标签 | 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);}}


推荐阅读
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • MySQL索引详解及其优化策略
    本文详细解析了MySQL索引的概念、数据结构及管理方法,并探讨了如何正确使用索引以提升查询性能。文章还深入讲解了联合索引与覆盖索引的应用场景,以及它们在优化数据库性能中的重要作用。此外,通过实例分析,进一步阐述了索引在高读写比系统中的必要性和优势。 ... [详细]
  • 本文介绍了如何利用Apache POI库高效读取Excel文件中的数据。通过实际测试,除了分数被转换为小数存储外,其他数据均能正确读取。若在使用过程中发现任何问题,请及时留言反馈,以便我们进行更新和改进。 ... [详细]
  • 本文深入探讨了 hCalendar 微格式在事件与时间、地点相关活动标记中的应用。作为微格式系列文章的第四篇,前文已分别介绍了 rel 属性用于定义链接关系、XFN 微格式增强链接的人际关系描述以及 hCard 微格式对个人和组织信息的描述。本次将重点解析 hCalendar 如何通过结构化数据标记,提高事件信息的可读性和互操作性。 ... [详细]
  • 针对NOJ1102黑白图像问题,本文采用深度优先搜索算法进行详细分析与实现。该问题要求在给定的时间限制(普通Java为1000-3000毫秒)和内存限制(65536KByte)内,处理一个n×n的黑白图像。通过对图像的逐像素遍历,利用深度优先搜索算法有效地识别并标记相连的黑色区域,从而实现图像的高效处理。实验结果显示,该方法在多种测试用例中均能稳定达到预期效果,具有较高的准确性和效率。 ... [详细]
  • Java SE 文件操作类详解与应用
    ### Java SE 文件操作类详解与应用#### 1. File 类##### 1.1 File 类概述File 类是 Java SE 中用于表示文件和目录路径名的对象。它提供了丰富的方法来操作文件和目录,包括创建、删除、重命名文件,以及获取文件属性和信息。通过 File 类,开发者可以轻松地进行文件系统操作,如检查文件是否存在、读取文件内容、列出目录下的文件等。此外,File 类还支持跨平台操作,确保在不同操作系统中的一致性。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • Java 模式原型在游戏服务器架构中的应用与优化 ... [详细]
  • Java集合框架特性详解与开发实践笔记
    Java集合框架特性详解与开发实践笔记 ... [详细]
  • 在循环读取文本文件时,经常会遇到一些常见的错误,如日期格式不正确、文件路径错误等。本文详细分析了这些问题,并提供了具体的解决方法,包括如何正确处理日期字符串和确保文件路径的准确性。通过这些方法,可以有效提高数据读取的稳定性和可靠性。 ... [详细]
  • 【并发编程】全面解析 Java 内存模型,一篇文章带你彻底掌握
    本文深入解析了 Java 内存模型(JMM),从基础概念到高级特性进行全面讲解,帮助读者彻底掌握 JMM 的核心原理和应用技巧。通过详细分析内存可见性、原子性和有序性等问题,结合实际代码示例,使开发者能够更好地理解和优化多线程并发程序。 ... [详细]
  • 利用Java开发功能完备的电话簿应用程序,支持添加、查询与删除操作
    本研究基于Java语言开发了一款功能全面的电话簿应用程序,实现了与数据库的高效连接。该应用不仅支持添加、查询和删除联系人信息,还具备输出最大和最小ID号的功能,并能够对用户输入的ID号进行有效性验证,确保数据的准确性和完整性。详细实现方法可参阅相关文档。 ... [详细]
  • 在二叉搜索树(BST)中,每个节点的值都大于其左子树中的所有节点值,小于其右子树中的所有节点值,因此BST具有天然的有序性。本文探讨了如何在给定的BST中找到第k小的节点。例如,在节点值分别为5、3、7、2、4、6、8的BST中,第三小的节点值为4。通过中序遍历,可以有效地找到第k小的节点,确保算法的时间复杂度为O(h + k),其中h是树的高度。 ... [详细]
  • 计算 n 叉树中各节点子树的叶节点数量分析 ... [详细]
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社区 版权所有