剑指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.假设输入的数组的任意两个数字都互不相同. 例如在下面 ...
随机推荐
- hdfs深入:10、hdfs的javaAPI操作
/** * 递归遍历hdfs中所有的文件路径 */ @Test public void getAllHdfsFilePath() throws URISyntaxException, IOExcept ...
- torch.nn.Linear()函数的理解
import torch x = torch.randn(128, 20) # 输入的维度是(128,20)m = torch.nn.Linear(20, 30) # 20,30是指维度output ...
- getHiddenProp() 浏览器状态切换改变
<script> function getHiddenProp() { var prefixes = ['webkit', 'moz', 'ms', 'o']; // if 'hidden ...
- NOIP专题复习2 图论-生成树
目录 一.知识概述 二.典型例题 1.口袋的天空 三.算法分析 (一)Prim算法 (二)Kruskal 四.算法应用 1.[NOIP2013]货车运输 五.算法拓展 1977: [BeiJing20 ...
- ubuntu Android Studio以及SDK安装
先使用迅雷下载linux版的Android Studio以及SDK,下载地址是https://dl.google.com/dl/android/studio/ide-zips/1.1.0/androi ...
- jQuery实现上传进度条效果
效果:(点击上传按钮) See the Pen pjGNJr by moyu (@MoYu1991) on CodePen. html代码: <!DOCTYPE html> <h ...
- java连接MySQL数据库并读取内容
package sqldemo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSe ...
- 将Java程序打包成可执行EXE文件的步骤
需要的工具myeclipse .jar2exe(附上下载地址,直接解压就可以用链接: https://pan.baidu.com/s/1qYPRgXu 密码: wbva) 1.将Java项目导出成.j ...
- noip模拟赛 无题
分析:这道题和以前做过的模拟赛题很像:传送门. 对于前30%的数据可以直接暴力求,k=1的数据利用线段树求区间最大值,没有修改操作可以用主席树.100%的数据主席树是肯定用不了的,观察到K非常小,可以 ...
- [USACO12FEB]附近的牛Nearby Cows
题目描述 Farmer John has noticed that his cows often move between nearby fields. Taking this into accoun ...