剑指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.假设输入的数组的任意两个数字都互不相同. 例如在下面 ...
随机推荐
- WC2007 石头剪刀布 数学+最小费用最大流
题面: 有N个人参加一场比赛,赛程规定任意两个人之间都要进行一场比赛:这样总共有N*(N-1)/2场比赛.比赛已经进行了一部分,我们想知道在极端情况下,比赛结束后最多会发生多少剪刀石头布情况.即给出已 ...
- mysql 存储过程批量删除重复数据
表结构: LOAD DATA INFILE '/usr/local/phone_imsi_12' replace INTO TABLE tbl_imsi2number_new FIELDS TERMI ...
- centos7搭建安装sentry
Sentry 是一款基于 Django实现的错误日志收集和聚合的平台,它是 Python 实现的,但是其日志监控功能却不局限于python,对诸如 Node.js, php,ruby, C#,java ...
- HashTable的C++实现
由哈希表的定义,采用C++完成了一个学生成绩存储系统,分析过程如下: 由于哈希表是按KEY值存储,我们假设KEY值为一个字符串.hash算法为字符串的前两位大写字母所对应的数字对一个质数的模运算. i ...
- 18Spring后置通知
Spring后置通知,和前置通知类似,直接看代码: package com.cn.spring.aop.impl; //加减乘除的接口类 public interface ArithmeticCalc ...
- GROUP函数
GROUP_ID 首先我们看看官方的解释: 大意是GROUP_ID用于区分相同分组标准的分组统计结果. 解释起来比较抽象,下面我们来看看具体的案例. 例1:单一分组 SQL> select gr ...
- 关于Python构建微服务的思考(一)
一:什么是微服务? 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成. 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的. 每个微服务仅关注于完成一件任务并很好地完成该任务. ...
- Python的发展与应用
cpu 内存 硬盘 操作系统 cpu:计算机的运算和计算中心,相当于人类大脑.飞机 内存:暂时存储数据,临时加载数据应用程序,4G,8G,16G,32G 速度快,高铁,断电即消失.造价很高 ...
- Linux 网卡配置
网卡配置(环境CentOS 6.7) 图形界面修改: # 在命令行直接输入setup进入配置 1.[root@mingyaun ~]# setup 2.NetWork configuration 3. ...
- LeetCode(41)First Missing Positive
题目 Given an unsorted integer array, find the first missing positive integer. For example, Given [1,2 ...