* 21【题目】输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
*      如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
*    【注】二叉搜索树特点:左子树比根结点值小,右子树比根结点值大。
*    【思路】①根据后序遍历结果确定根结点;
*     ②判断所有左子树是否比根结点值小;
*     ③判断所有右子树是否比根结点值大;
    * ④使用递归,继续分别判断左右子树中是否符合这一特点。

package com.exe5.offer;

/**
* 21【题目】输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
* 如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
* 【注】二叉搜索树特点:左子树比根结点值小,右子树比根结点值大。
* 【思路】①根据后序遍历结果确定根结点;
* ②判断所有左子树是否比根结点值小;
* ③判断所有右子树是否比根结点值大;
* ④使用递归,继续分别判断左右子树中是否符合这一特点。
* @author WGS
*
*/
public class VerifySequenceOfBST { public boolean verifySequenceOfBST(int[] arrOfPostOrder){
if(arrOfPostOrder==null) return false;
int len=arrOfPostOrder.length;//
System.out.println("len:"+len);//
int rootVal=arrOfPostOrder[len-1];//根据后序遍历结果得到根结点值
//判断左子树(<根结点值)
int i=0;
for(;i<len-1;i++){//
if(arrOfPostOrder[i]>rootVal)
break;
}
System.out.println(i);//3
//判断右子树(>根结点值)
for(int j=i;j<len-1;j++){
if(arrOfPostOrder[j]<rootVal)
return false;
}
//继续判断左子树
int[] leftTree=new int[(len-1)/2];//
System.arraycopy(arrOfPostOrder, 0, leftTree, 0, (len-1)/2);
boolean leftFlag=true;
if(i>0){
leftFlag=verifySequenceOfBST(leftTree);
}
//继续判断右子树
int[] rightTree=new int[(len-1)/2];//需要注意到的是此处建立数组时长度是在不断发生变化的
System.arraycopy(arrOfPostOrder, (len-1)/2, leftTree, 0,len-i-1);
boolean rightFlag=true;
if(i<arrOfPostOrder.length-1){
rightFlag=verifySequenceOfBST(rightTree);
} return leftFlag&&rightFlag; }
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr=new int[]{5,7,6,9,11,10,8};
System.out.println(new VerifySequenceOfBST().verifySequenceOfBST(arr));
} }

剑指offer系列21--二叉搜索树的后续遍历序列的更多相关文章

  1. 剑指offer系列——62.二叉搜索树的第k个结点

    Q:给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. T: 中序遍历,递归: int count = 0; public ...

  2. 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 + 二叉排序树 + 最近公共祖先

    剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 Offer_68_1 题目描述 方法一:迭代法 由于该题的二叉树属于排序二叉树,所以相对较简单. 只需要判断两个结点是否在根节点的左右子树中 ...

  3. 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

    剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q ...

  4. 刷题-力扣-剑指 Offer II 055. 二叉搜索树迭代器

    剑指 Offer II 055. 二叉搜索树迭代器 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kTOapQ 著作权归领扣网络所有 ...

  5. 剑指offer 24:二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 后序遍历,顾名思义根节点位于尾部,故可将 ...

  6. 剑指OFFER之从二叉搜索树的后序遍历序列(九度OJ1367)

    题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 输入: 每个测试案例包括2行: 第一行为1个整数 ...

  7. 剑指offer:二叉搜索树的后续遍历序列

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

  8. 剑指offer之 二叉搜索树的后续遍历序列

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

  9. 剑指offer 27:二叉搜索树与双向链表

    题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 解题思路 采用中序遍历遍历二叉树,利用二叉排序树的特性,顺次连接节点,形成 ...

  10. 剑指offer 面试题. 二叉搜索树的第k个结点

    题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4.     解: 由于二叉搜索树的中序遍历是升序,所以在中 ...

随机推荐

  1. 初始化IoC容器(Spring源码阅读)-我们到底能走多远系列(31)

    我们到底能走多远系列(31) 扯淡: 有个问题一直想问:各位你们的工资剩下来会怎么处理?已婚的,我知道工资永远都是不够的.未婚的你们,你们是怎么分配工资的? 毕竟,对自己的收入的分配差不多体现了自己的 ...

  2. 70. Climbing Stairs

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  3. C++ Primer : 第十二章 : 动态内存之shared_ptr类

    在C++中,动态内存是的管理是通过一对运算符来完成的:new  ,在动态内存中为对象分配空间并返回一个指向该对象的指针,delete接受一个动态对象的指针,销毁该对象,并释放该对象关联的内存. 动态内 ...

  4. nginx的HA集群及配置

    一.服务器环境 master服务器: ip:192.168.11.155 系统环境:CentOS release 6.5 (Final) 内核版本:2.6.32-431.el6.x86_64 防火墙和 ...

  5. PHP 将json的stdClass Object转成数组array

    PHP和JS通讯通常都用json,但是PHP要用json的数据,通过json_decode转出来的数组并不是标准的array,所以需要用这个函数进行转换. function object_array( ...

  6. Android——复选按钮和开关按钮

    复选按钮和开关按钮代码如下: <LinearLayout android:layout_width="match_parent" android:layout_height= ...

  7. meta name="viewport" 属性详解

    随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择.然而,每一款手机有不同的分辨率,不同屏幕 ...

  8. 用Socket做一个局域网聊天工具(转)

    原文:http://www.cnblogs.com/technology/archive/2010/08/15/1799858.html 程序设计成为简单的服务端和客户端之间的通信, 但通过一些方法可 ...

  9. 学习笔记之 初试Caffe,Matlab接口提取feature

    Caffe 提供了matlab接口,可以用于提取图像的feature.

  10. error LNK2026: 模块对于 SAFESEH 映像是不安全的

    解决方法: 1.打开该项目的“属性页”对话框. 2.单击“链接器”文件夹. 3.单击“命令行”属性页. 4.将 /SAFESEH:NO 键入“附加选项”框中,然后点击应用.