判断一个数组序列为二叉树的后序遍历序列
来源:互联网 发布:只有我知 杭州见面会 编辑:程序博客网 时间:2024/05/16 16:10
思路:
1.、 二叉树中,满足左子节点<父节点<右子树节点,后序遍历中,先遍历左子树,再遍历右子树,最后遍历根节点。
2、二叉树一条重要的性质就是它满足中序遍历的结果。所以左子树中的节点最大也要小于等于根节点,右子树中的节点要大于等于根节点。
3、对于后序遍历而言,数组序列中最后一个元素为其根节点,然后前面的数中,从最开始到第一个大于根节点的数都是左子树中的数,而后面到倒数第二个数应该都是大于根节点的,是右子树,如果后面的数中有小于根节点的,那么说明这个序列不是二叉搜索树的后序遍历序列。
4、采用分治算法的思想,即将问题分为两部分,然后再将每一部分分成两部分,递归调用自身,即程序中有两次调用自身。
5、 这里用到一个Arrays工具类的一个方法,public static int[] copyOfRange(int[] original,int from, int to),将指定数组的指定范围复制到一个新数组。
- 参数:
original
- 将要从其复制一个范围的数组from
- 要复制的范围的初始索引(包括)to
- 要复制的范围的最后索引(不包括)。(此索引可以位于数组范围之外)。- 返回:
- 包含取自原数组指定范围的新数组,截取或用 0 填充以获得所需长度
package JianZhiOffer;
import java.util.Arrays;
public class VerifySquenceOfBST
{
public boolean VerifySquenceOfBST(int[] sequence)
{
if(sequence==null||sequence.length <=0)
return false;
int len=sequence.length ;
int root=sequence[len-1];
int i=0;
for(i=0;i<len-1;i++)
{
if(sequence[i]>=root)
break;
}
int j=i;
for(;j<len-1;j++)
{
if(sequence[j]<root)
return false;
}
boolean left=true;
if(i>0)
{
left=VerifySquenceOfBST(Arrays.copyOfRange(sequence,0,i)); //分治算法思想,递归调用处理左子树序列
}
boolean right=true;
if(i<len-1)
{
right=VerifySquenceOfBST(Arrays.copyOfRange(sequence,i,len-1)); //分治算法思想,递归调用处理右子树序列
}
return left&&right;
}
}
阅读全文
0 0
- 判断一个数组序列为二叉树的后序遍历序列
- 《剑指offer》:[24]判断一个序列是否为二叉树的后序遍历序列
- 判断给定的数组是否为二叉搜索树的后序遍历序列
- 剑指off-判断一个数组是不是搜索二叉树的后序遍历的序列
- 输入一个数列,判断是否为某一个二叉搜索树的后序遍历序列
- 剑指offer——判断一个序列是否为二叉搜索树的后序遍历
- 【面试题】剑指offer24--判断一个序列是否为二叉树的后序遍历
- 判断一个整数数组是不是二叉搜索树的后序遍历序列
- 判断一个数组是不是二叉搜索树的后序遍历序列——剑指offer
- 剑指offer:二叉搜索树的后序遍历序列(判断一个数组是否是二叉搜索树的后续遍历序列)
- 判断二叉搜索树是否为后序遍历序列
- 判断一个序列是否是一棵二叉树的后序遍历序列(分治算法)
- 二叉搜索树的后序遍历序列(判断后序遍历序列是否合法)
- 判断一个序列是否是一个二叉查找树的后序遍历结果
- 剑指offer面试题24判断一个序列是否为BST的后序遍历序列附加输入递归的创建二叉树
- 判断二叉搜索树的后序遍历序列是否合法
- 判断二叉树的后序遍历序列是否合法
- 判断整数序列是否为二叉查找树的后序遍历结果
- 572. Subtree of Another Tree
- 兔子产子
- 6月3日,每日20行。
- 《飞屋环游记》让心去旅行
- Java数组
- 判断一个数组序列为二叉树的后序遍历序列
- poj 1852
- 逆波兰表达式的产生及计算
- 安卓入门之"搭建Android的开发环境"
- 《华为机试在线训练》之计算字符个数
- 【linux】Linux下几种环境变量的设置
- Windows系统中设置软件的开机自动启动
- 基于Netty与RabbitMQ的消息服务
- Android笔记二:Activity启动模式