判断给定的整数数组是不是某二叉搜索树的后序遍历的结果
二叉搜索树:
又:二叉查找树(Binary Search Tree),二叉排序树;
它或者是一棵空树,或者是具有下列性质的二叉树:
- 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
- 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树。
数大于根肯定往根的右子树走,小于往左子树走
后序遍历:
左子->右子->根
想法(参考https://blog.csdn.net/xidiancoder/article/details/60956436)
给出的整数数组:a[n]
method(a[n])
- 为空,返回false;只有一个元素,返回true;
- root=a[n-1];
- 从0~n-2找出第一个a[i]>root(没找到,则都为左子树)
- 若i<n-1,有右子树;i>0,有左子树
- 0~i-1是左子树,method(a[i-1])
- 如果a[i]~a[n-2]都大于root,则i~n-2是右子树,method(a[n-1-1]),否则返回false(不符合之前的“大于root都在右子树”的定义)
- return 3.2&3.3
public class Solution {
public static boolean VerifySquenceOfBST(int [] sequence) {int index;boolean Rflag=false;boolean Lflag=false;int n=sequence.length;if(n==0)return false;if(n==1)return true;int root=sequence[n-1];index=FindIndex(sequence,root);for(int i=index+1;i<n-1;i++) {if(sequence[i]<root)return false;}if(index<n-1) {int lenR=n-1-index;int[] arrR=new int[lenR];for(int i=index,j=0;i<n-1;j++,i++) {arrR[j]=sequence[i];}Rflag=VerifySquenceOfBST(arrR);}elseRflag=true;if(index>0) {int lenL=index;int[] arrL=new int[lenL];for(int i=0;i<index;i++) {arrL[i]=sequence[i];}Lflag=VerifySquenceOfBST(arrL);}elseLflag=true;return Lflag&&Rflag;
}public static int FindIndex(int[] arr,int val) {int n=arr.length;for(int i=0;i<n-1;i++) {if(arr[i]>val)return i;}return n-2;}
}
判断给定的整数数组是不是某二叉搜索树的后序遍历的结果相关推荐
- 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列
剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...
- 【剑指Offer】23、二叉搜索树的后序遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路: 对于后续遍历序列,序 ...
- 剑指offer:面试题33. 二叉搜索树的后序遍历序列
题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 参考以下这颗二叉搜 ...
- 剑指offer 24:二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 二叉搜索数的定义:左节点比根节点小,右节 ...
- 剑指OFFER之从二叉搜索树的后序遍历序列(九度OJ1367)
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 输入: 每个测试案例包括2行: 第一行为1个整数 ...
- 剑指offer(Java实现) 二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 先找到右子树的开始位置,然后分别进行左右 ...
- 面试题整理7 二叉搜索树的后序遍历序列
<剑指offer>面试题24: 题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同. ...
- 【超100%解法】剑指 Offer 33. 二叉搜索树的后序遍历序列
立志用最少的代码做最高效的表达 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 示例 1: 输入: ...
- C#刷剑指Offer | 二叉搜索树的后序遍历序列
[C#刷题]| 作者 / Edison Zhou 这是EdisonTalk的第289篇原创内容 我们来用之前学到的数据结构知识来刷<剑指Offer>的一些核心题目(精选了其中30+道题目) ...
最新文章
- Linux 虚拟化网络技术 — 虚拟网络协议栈
- PHP使用session_set_save_handler陷阱
- 一名即将大三的小伙子在疫情期间的思考与总结
- Tiny6410之重定位代码到SDRAM
- jQuery—tab栏切换
- 点击按钮,缩放图片(img.width、img.style.width、img.offsetWidth)
- ThinkPHP基础
- malloc函数详解
- 【word】复制到word的文字不能调整行间距(行间距过大)
- 证券交易2-券商柜台系统
- swift 下标 subscript
- 清理C盘(浪费了很多时间,终于找到了一个比较高效的方法)
- 华硕电脑一开机就等待按F1然后自动进入BIOS界面如何解决
- Dell笔记本(预装win10)重装win7的方法
- python中合法的赋值语句是_以下( )是合法的Python赋值语句。_学小易找答案
- 二连杆纯连杆动力学建模——LangrageEquation with Matlab
- 当Mac电脑遇到ANDROID_NDK_HOME not defined...报错
- 数据分析师对年龄有限制吗?现在转行还来得及吗?
- Vitis指南 | Xilinx Vitis 系列(二)
- 区块链原理及核心技术
热门文章
- 转 :Vim文件编码识别与乱码处理
- [备忘] Automatically reset Windows Update components
- 一位从业20年的程序员分享积累的20条编程经验
- 4k视频写入速度要求_为什么视频工作者需要外置硬盘?
- [基础算法]通过后缀表达式实现表达式的计算
- linux命令--VI命令详解(一)
- k8s serviceaccount pod亲和性 污点
- Spark HistoryServer日志解析清理异常
- golang设置运行CPU数量及sync.Mutex全局互斥锁的使用示例
- Windows 查看所有进程命令tasklist