热门标签 | 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体系,包括集合的基本概念及其与数组的区别。同时,深入探讨了Comparable和Comparator接口的区别,并分析了各种集合类的底层数据结构。最后,提供了如何根据需求选择合适的集合类的指导。 ... [详细]
  • 探讨如何修复Visual Studio Code中JavaScript的智能感知和自动完成功能在特定场景下无法正常工作的问题,包括配置检查、语言模式选择以及类型注释的使用。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 本文探讨了在Django项目中,如何在对象详情页面添加前后导航链接,以提升用户体验。文章详细描述了遇到的问题及解决方案。 ... [详细]
  • Python3 中使用 lxml 模块解析 XPath 数据详解
    XPath 是一种用于在 XML 文档中查找信息的路径语言,同样适用于 HTML 文件的搜索。本文将详细介绍如何利用 Python 的 lxml 模块通过 XPath 技术高效地解析和抓取网页数据。 ... [详细]
  • ML学习笔记20210824分类算法模型选择与调优
    3.模型选择和调优3.1交叉验证定义目的为了让模型得精度更加可信3.2超参数搜索GridSearch对K值进行选择。k[1,2,3,4,5,6]循环遍历搜索。API参数1& ... [详细]
  • 本文探讨了SSDP(简单服务发现协议)和WSD(Web服务发现)协议,特别是SSDP如何通过固定多播地址239.255.255.250:1900实现局域网内的服务自发现功能。文中还详细介绍了SSDP协议的关键操作类型及其应用场景。 ... [详细]
  • LambdaMART算法详解
    本文详细介绍了LambdaMART算法的背景、原理及其在信息检索中的应用。首先回顾了LambdaMART的发展历程,包括其前身RankNet和LambdaRank,然后深入探讨了LambdaMART如何结合梯度提升决策树(GBDT)和LambdaRank来优化排序问题。 ... [详细]
  • 本文介绍了一道来自《紫书》的编程题目——UVa11212 编辑书稿。该问题通过迭代加深搜索(IDA*)算法解决,旨在找到将给定排列转换为升序排列所需的最少步骤。文章提供了详细的解题思路和代码实现。 ... [详细]
  • Canvas漫游:碰撞检测与动画模拟
    探索Canvas在Web开发中的应用,通过碰撞检测与动画模拟提升交互体验。 ... [详细]
  • 详解 | 日志系统ViseLog的基本使用与功能
    本文详细介绍了日志系统ViseLog的使用方法及其核心功能,旨在帮助开发者更好地理解和利用这一工具,提高开发效率。 ... [详细]
  • 本文探讨了随着并发需求的增长,MySQL数据库架构如何从简单的单一实例发展到复杂的分布式系统,以及每一步演进背后的原理和技术解决方案。 ... [详细]
  • 1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
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社区 版权所有