剑指offer-第四章解决面试题思路(判断一个数组是否为二叉搜索树的后序遍历序列)
二叉搜索树:二叉搜索树根节点的左边都比根节点小,右边都比根节点大。
例题:输入一个数组,判断是否为二叉搜索树的后序遍历序列,如果是,返回true,如果不是,返回flase,假设没有重复的元素。
思路:由于是后序遍历,所以数组的最后一个节点是根节点,而且,由于是二叉收索树,所以,前面的数据被分为两部分,右边部分比根节点小,左边比根节点大。左右两边又分别为二叉收索树,因此可以用递归来实现。
Java代码:
public class IsBinarySearchTree {
public boolean isBST(int[] sequence,int start,int len){
if(sequence==null||len<=0)
return false;
int root=sequence[len-1];
//二叉搜索树的左边都小于根节点,右边都大于根节点。
int i=0;
while(i<len-1){
if(sequence[i]>root)
break;
i++;
}
int j=i;
while(j<len-1){
if(sequence[j]<root)
return false;
j++;
}
//判断左子树是不是二叉搜索树
boolean left=true;
if(i>0)
left=isBST(sequence,0,i);
//判断右子树是不是二叉搜索树
boolean right=true;
if(i<len-1)
right=isBST(sequence,i,len-i-1);
return left&&right;
}
public static void main(String[] args) {
int[] a={3,5,6};
IsBinarySearchTree ibt=new IsBinarySearchTree();
if(ibt.isBST(a, 0, a.length)){
System.out.println("is BinarySearchTree endRoot");
}
else
System.out.println("is not BinarySearchTree endRoot");
}
}
剑指offer-第四章解决面试题思路(判断一个数组是否为二叉搜索树的后序遍历序列)的更多相关文章
- 剑指offer23:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。输出Yes OR No。
1 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 2 思路和方法 二叉搜索树:二叉查找树(Bin ...
- 《剑指offer》二叉搜索树的后序遍历序列
本题来自<剑指offer> 二叉搜索树的后序遍历序列 题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字 ...
- 【Java】 剑指offer(33) 二叉搜索树的后序遍历序列
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如 ...
- 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列
剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...
- 剑指Offer:二叉搜索树的后序遍历序列【33】
剑指Offer:二叉搜索树的后序遍历序列[33] 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ...
- 剑指Offer(二十三):二叉搜索树的后序遍历序列
剑指Offer(二十三):二叉搜索树的后序遍历序列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- Go语言实现:【剑指offer】二叉搜索树的后序遍历序列
该题目来源于牛客网<剑指offer>专题. 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. Go ...
- 【剑指Offer面试编程题】题目1367:二叉搜索树的后序遍历序列--九度OJ
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 输入: 每个测试案例包括2行: 第一行为1个整数 ...
- 剑指 Offer 33. 二叉搜索树的后序遍历序列 + 根据二叉树的后序遍历序列判断对应的二叉树是否存在
剑指 Offer 33. 二叉搜索树的后序遍历序列 Offer_33 题目详情 题解分析 本题需要注意的是,这是基于一颗二叉排序树的题目,根据排序二叉树的定义,中序遍历序列就是数据从小到大的排序序列. ...
随机推荐
- Docker入门使用
先来一波docker的指令: docker inspect 容器id 查询容器信息 docker stop 容器id 停止容器id docker rm 容器id ...
- sql报字段过大的错误解决方法
set global max_allowed_packet = 2*1024*1024*10
- MVC bootstrap 实现 bootstrap table 左右传递数据
源码: @{ ViewBag.Title = "Index"; } @using BC.Platform.UPMS.Models; <!DOCTYPE html> &l ...
- JavaScript中this关键字的使用比较
JavaScript中this关键字的使用比较 this关键字在JavaScript中,用的不能说比较多,而是非常多.那么熟悉this关键字的各种用法则显得非常关键. this有时候就是我们经常说的上 ...
- JMS-activeMq点对点模式
上一篇对JMS进行介绍了一下,接下来总结一下activemq点对点模式以及订阅发布模式. (1)下载:首先到官网http://activemq.apache.org下载activemq (2)运行:解 ...
- java对象的深浅clone
在Java语言中,数据类型分为值类型(基本数据类型)和引用类型,值类型包括int.double.byte.boolean.char等简单数据类型,引用类型包括类.接口.数组等复杂类型. 浅克隆和深克隆 ...
- Spring + Spring MVC + MyBatis框架整合
---恢复内容开始--- 一.Maven Web项目创建 如有需要,请参考:使用maven创建web项目 二.Spring + Spring MVC + MyBatis整合 1.Maven引入需要的J ...
- TextView实现图文混合编排
TextView实现图文混合编排 一.简介 在这里实现图文混合编排使用的是:TextView中预定义的类似Html的标签 二.方法 * 1.设置好html标签的文本 String html=" ...
- SSL和SSH的区别
SSL是一种国际标准的加密及身份认证通信协议,您用的浏览器就支持此协议.SSL(Secure Sockets Layer)最初是由美国Netscape公司研究出来的,后来成为了Internet网上安全 ...
- javascrip函数简单介绍
JavaScript 函数定义JavaScript 使用关键字 function 定义函数.函数可以通过声明定义,也可以是一个表达式.函数声明在之前的教程中,你已经了解了函数声明的语法 :functi ...