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


推荐阅读
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 本文深入探讨了二叉搜索树(Binary Search Tree, BST)及其操作,包括查找、插入和删除节点。同时,文章还介绍了平衡二叉树(AVL树)的概念及调整方法,并详细讨论了如何判断两个序列是否构成相同的二叉搜索树。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文探讨了如何在iOS开发环境中,特别是在Xcode 6.1中,设置和应用自定义文本样式。我们将详细介绍实现方法,并提供一些实用的技巧。 ... [详细]
  • 深入理解Lucene搜索机制
    本文旨在帮助读者全面掌握Lucene搜索的编写步骤、核心API及其应用。通过详细解析Lucene的基本查询和查询解析器的使用方法,结合架构图和代码示例,带领读者深入了解Lucene搜索的工作流程。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • 本题涉及一棵由N个节点组成的树(共有N-1条边),初始时所有节点均为白色。题目要求处理两种操作:一是改变某个节点的颜色(从白变黑或从黑变白);二是查询从根节点到指定节点路径上的第一个黑色节点,若无则输出-1。 ... [详细]
  • 本文提供了使用Java实现Bellman-Ford算法解决POJ 3259问题的代码示例,详细解释了如何通过该算法检测负权环来判断时间旅行的可能性。 ... [详细]
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社区 版权所有