剑指offer面试题24-二叉搜索树的后序遍历序列
题目:
/*
* 输入一个整数数组,推断该数组是不是某二叉搜索树的兴许遍历的结果。<br/>
* 假设是则返回true,否则返回false。<br/>
* 如果输入的数组的随意两个数组都互不同样
* */
既然是后序遍历,那么根元素肯定是在最后一个。
又应该为二叉搜索树,所以左边一半的肯定比根要小,右边一半的比根要大。
如今有了根,就能够把剩下的数组依据比根小与比根大的切割线分成两半。
然后再递归推断。
什么时候返回false:
当确定了某个切割点以后,(左边的全比根小。右边的第一个比根大)又在右边的数组中找到一个比根小的,说明该数组不满足二叉搜索树的后序遍历。
package com.aii.algorithm; /**
* 输入一个整数数组,推断该数组是不是某二叉搜索树的兴许遍历的结果。 <br/>
* 假设是则返回true,否则返回false。<br/>
* 假设输入的数组的随意两个数组都互不同样
* */
public class VerifySquenceOfBST { public boolean check(int[] array, int start, int end) {
if (end >= 0 && end - start <= 1) {
return true;
}
int root = array[end];
int newRootIndex = -1; // 1.找出那个切割线
for (int i = start; i < end; i++) {
// 遇到比root大的数,表示前一半已找到。
// 则前一半的根原始的i-1
if (array[i] > root) {
newRootIndex = i;
break;
}
} // 2.确定切割线以后再看左边和右边是否都满足,最后是用left&&right推断
boolean left = true;
boolean right = true; // newRootIndex=-1没找到,进这个if说明是找到了
if (newRootIndex != -1) { // 如今要做的就是验证后半部分是否都满足全部的元素都大于root
for (int i = newRootIndex; i < end - 1; i++) {
// 假设找到一个。那就肯定是不满足的了,返回false
if (array[i] < root) {
return false;
}
} // 假设要找check(array,start,newRootIndex-1),则必须保证end比start要大,
// 即newRootIndex-1 - start > 0
if (newRootIndex - 1 - start > 0) {
left = check(array, start, newRootIndex - 1);
} // 假设要找check(array,newRootIndex,end-1),则必须保证end-1比newRootIndex要大
// 即end-1 - newRootIndex > 0
if (end - 1 - newRootIndex > 0) {
right = check(array, newRootIndex, end - 1);
} } else {
// 遇到没有找到的起概况。那就说明全部的数都比root小。那全在root的左节点下。
// 所以left=check(array,start,end-1)
left = check(array, start, end - 1);
}
return left && right;
}
}
剑指offer面试题24-二叉搜索树的后序遍历序列的更多相关文章
- 剑指Offer:面试题24——二叉搜索树的后序遍历序列(java实现)
问题描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同. 思路: 1.首先后序遍历的结果是[(左子 ...
- 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列
剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...
- 剑指offer(23)二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 题目分析 1.后续遍历我们可以知道,最右边的是根节 ...
- 【剑指Offer】23、二叉搜索树的后序遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路: 对于后续遍历序列,序 ...
- 《剑指offer》面试题24 二叉搜索树的后序遍历序列 Java版
(判断一个元素均不相同的序列是否为一个BST的LRD) 书中方法:首先对于二叉搜索树,左子树中的所有元素小于根节点小于右子树中的所有元素,然后后序遍历序列最后一个元素是根节点,这是我们已知的条件.这道 ...
- 《剑指offer》面试题33. 二叉搜索树的后序遍历序列
问题描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 参考以下这颗二叉搜索树: 5 / \ ...
- 【Offer】[33] 【二叉搜索树的后序遍历序列】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回true, 否则返回false. 假设输入的数组的任意两个数字 ...
- 剑指 Offer 33. 二叉搜索树的后序遍历序列 + 根据二叉树的后序遍历序列判断对应的二叉树是否存在
剑指 Offer 33. 二叉搜索树的后序遍历序列 Offer_33 题目详情 题解分析 本题需要注意的是,这是基于一颗二叉排序树的题目,根据排序二叉树的定义,中序遍历序列就是数据从小到大的排序序列. ...
- (剑指Offer)面试题24:二叉搜索树的后序遍历序列
题目: 输入一个整数数组,判断该数组是不是某个二叉搜索树的后序遍历的结果,如果是则返回true,否则返回false. 假设输入的数组的任意两个数字都互不相同. 思路: 根据二叉搜索树的后序遍历特点,很 ...
- 剑指Offer面试题:22.二叉搜索树的后序遍历序列
一.题目:二叉搜索树的后序遍历序列 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同. 例如在下面 ...
随机推荐
- PowerDesigner连接MySQL数据库
详细步骤请点击下面的链接查看! 我在网上找了很多篇教程, 其中这一篇是最好的. 可以成功的帮助我们把PowerDesigner和MySQL数据库相连. PowerDesigner真的非常强大! 设计数 ...
- vue中axios发送post请求,后端(@RequestParam)接不到参数
遇到的问题描述 :axios post 请求,后端接收不到参数. 我们的接口是java,用@RequestParam来接收前端的参数 解决方案:使用qs:axios中已经包含有qs,所以无需重新安装, ...
- oracle亲手安装过程
适用于centos6 radhat6版本 1.检查依赖库: rpm -q binutils compat-libcap1 compat-libstdc++ compat-libstdc++.i686 ...
- rownum导致sql不能进行谓词推入
背景 案件(13405_RI-再保结算查询导出太慢),造成性能慢的原因是执行以下sql时,每次执行平均需要消耗2秒, 画面上,点击一次导出按钮,就会发起数以百记的调用. SQL执行代码段 select ...
- js 技巧 (十)广告JS代码效果大全 【2】
2.[鼠标感应] 与前面一个代码不同的是,当鼠标移动到广告图片上是可以感应显示另外设置好的广告大图效果,下面就是实现效果所需代码: function bigshow(){ docume ...
- token 的生成杂谈
背景 很多时候我们需要用 token 来作为一些标识, 比如: 一个用户登录后的认证标识. 实现方式 md5 的方式: $v = 1; // 自己定义的 需要hash 的value 值 $key = ...
- NodeJs中数据库的使用
另一遍通用的NODEJS数据库方法koa,express,node 通用方法连接MySQL 1.Node.js 连接 MySQL $ cnpm install mysql 连接mysql: var m ...
- linux虚拟环境搭建
一.virtualenv的安装与使用 1.安装virtualenv pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualen ...
- 一次偶遇 IOException
今天遇到了个挺有意思的事情,为了实现上传头像的功能,这是需要实现的功能,项目在本地跑起来且在本地 服务器(tomcat)也实现了头像上传,并把头像路径存入数据库,但是却在上传到线上服务器的时候死活存不 ...
- jmap Unable to open socket file解决
pid:Unable to open socket file: target process not responding or HotSport VM not loadedThe -F option ...