您的位置:首页 > 职场人生

码农小汪-剑指Offer之21-二叉搜索树的后序遍历序列

2016-03-30 22:08 141 查看

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

题解

首先我们得知道后序遍历的特点,我们的遍历后的字串被分为了三部分,左右根,此题中的二叉搜素树是一个有循序的,很有规律。左边的比右边的大。知道这个之后呢。我们肯定要用递归遍历这个字符串,分成几部分进行不断的缩小处理。直到我们可以处理为止。有点像归并排序的特点。非常的像。

package JianzhiOffer;

public class Slution21 {
/**
* 后序遍历的思路
* 左右中间的,可是二叉树是(叉搜索树,二叉排序树 )
* 这个树很有特点,最后一个数把我们的前面的分为两半边,只要都是满足就成功了
* @param sequence
* @return
*/
public boolean VerifySquenceOfBST(int[] sequence) {
if(sequence.length==0){
return false;
}
int start=0;
int end=sequence.length-1;
return findWrong(sequence, start, end);
}

public boolean findWrong(int[]sequence,int start,int end){
if(start>=end){
//都相聚在一起了肯定成功啦
return true;
}
int i,j;
for( i=start;i<end;i++){
if(sequence[i]>sequence[end]){
//前面的肯定比我们 的最后个元素小
break;
}
//找到分界线之后,只要发现还有比最后个小的就是说明不是后序遍历
}
for(j=i;j<end;j++){
if(sequence[j]<sequence[end]){
return false;
}
}
/**
* 递归的去寻找这种状态
*/
return findWrong(sequence,start,i-1)&&findWrong(sequence,i,end-1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: