题目:

/*

 * 输入一个整数数组,推断该数组是不是某二叉搜索树的兴许遍历的结果。<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-二叉搜索树的后序遍历序列的更多相关文章

  1. 剑指Offer:面试题24——二叉搜索树的后序遍历序列(java实现)

    问题描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同. 思路: 1.首先后序遍历的结果是[(左子 ...

  2. 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

    剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...

  3. 剑指offer(23)二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 题目分析 1.后续遍历我们可以知道,最右边的是根节 ...

  4. 【剑指Offer】23、二叉搜索树的后序遍历序列

      题目描述:   输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   解题思路:   对于后续遍历序列,序 ...

  5. 《剑指offer》面试题24 二叉搜索树的后序遍历序列 Java版

    (判断一个元素均不相同的序列是否为一个BST的LRD) 书中方法:首先对于二叉搜索树,左子树中的所有元素小于根节点小于右子树中的所有元素,然后后序遍历序列最后一个元素是根节点,这是我们已知的条件.这道 ...

  6. 《剑指offer》面试题33. 二叉搜索树的后序遍历序列

    问题描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同.   参考以下这颗二叉搜索树: 5 / \ ...

  7. 【Offer】[33] 【二叉搜索树的后序遍历序列】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回true, 否则返回false. 假设输入的数组的任意两个数字 ...

  8. 剑指 Offer 33. 二叉搜索树的后序遍历序列 + 根据二叉树的后序遍历序列判断对应的二叉树是否存在

    剑指 Offer 33. 二叉搜索树的后序遍历序列 Offer_33 题目详情 题解分析 本题需要注意的是,这是基于一颗二叉排序树的题目,根据排序二叉树的定义,中序遍历序列就是数据从小到大的排序序列. ...

  9. (剑指Offer)面试题24:二叉搜索树的后序遍历序列

    题目: 输入一个整数数组,判断该数组是不是某个二叉搜索树的后序遍历的结果,如果是则返回true,否则返回false. 假设输入的数组的任意两个数字都互不相同. 思路: 根据二叉搜索树的后序遍历特点,很 ...

  10. 剑指Offer面试题:22.二叉搜索树的后序遍历序列

    一.题目:二叉搜索树的后序遍历序列 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true,否则返回false.假设输入的数组的任意两个数字都互不相同. 例如在下面 ...

随机推荐

  1. webstorm 设置ES6语法支持以及添加vuejs开发配置

    参考文章:https://blog.csdn.net/diligentkong/article/details/75040651

  2. 使用JQuery MiniUI,json数据构建TreeGrid(树图)

    index.html直接上代码. 需要引用MiniUI的boot.js <!DOCTYPE html> <html> <head> <meta charset ...

  3. Mac OS X 中安装 brew

    不想被误导?直接看官方文档:   http://mxcl.github.com/homebrew/    先安装Git,打开一个shell cd /usr/local sudo mkdir homeb ...

  4. windows mac配置host方法

    配置host方法如下: 1.windows 系统配置host (1)打开电脑的系统盘(一般默认为C盘):C盘 -> Windows -> System32 -> drives -&g ...

  5. 「 HDU P4734 」 F(x)

    # 题目大意 对于一个数 $x$,它的每一位数字分别是 $A_{n}A_{n-1}A_{n-2}\cdots A_{2}A_{1}$,定义其权重 $f(x)=\sum_{i=1}^{n}\left(A ...

  6. 零基础入门学习Python(5)--闲聊之Python的数据类型

    前言 本次主要闲聊一下python的一些数值类型,整型(int),浮点型(float),布尔类型(bool),还有e记法(科学计数法),也是属于浮点型. 数值类型介绍 整型 整型就是我们平时所说的整数 ...

  7. shell脚本、if语句、for循环语句

    shell在shell脚本中,如果用户不输入东西,系统不自动退出,this is a bug!文件测试语句:-d -f -r -w -x -e逻辑测试语句:“&&”与(同时满足) “| ...

  8. Tomcat8.0 JDK1.8 的详细配置 Win10

    官网下载 先安装JDK以及JRE 之后安装Tomcat jdk配置环境变量: 用户变量:path:C:\Program Files\Java\jdk1.8.0_161\bin     ( jdk安装的 ...

  9. Windows学习总结(11)——Windows批处理命令编写代码及小程序简介

    批处理(Batch)也称为批处理脚本.顾名思义,就是对某对象进行批量的处理.DOS批处理是基于DOS命令,用来自动地批量地执行DOS命令以实现特定操作的脚本.批处理是一种简化的脚本语言,它应用于DOS ...

  10. python 去掉html中其他属性,只保留href 和 src

    https://segmentfault.com/q/1010000010845573 import re #reg=r'\s+[^(href)]*=\"[^<>]+\" ...