/**我的思路稍微与大伙有所不同,我们知道二叉搜索树的中序遍历结果就是数组排序过后的结果,
所以这就相当于知道了中序和后序,中序肯定是正确的,后序的结果正不正确不确定,
我们先假设后序结果是正确的.
当中途推出毛病了,那么就不是正确了,
如何判断有毛病呢.
后序数组的最后一个元素一定是根,那么我们就按照这个根划分,
如果这个根元素在中序数组里面则假设是合法的,如果不在中序数组里面,则假设不合理,可直接得到答案
*/
import java.util.Arrays;
public class Solution {
private boolean result=true;
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0)
return false;
int[] mid=new int[sequence.length];
for(int i=0;i<sequence.length;i++){
mid[i]=sequence[i];
}
Arrays.sort(mid);
isHaving(mid,0,mid.length-1,sequence,0,sequence.length-1);
return result;
}
private void isHaving(int[] mid,int midstart,int midend,int[] last,int laststart,int lastend){
if(midstart>midend||laststart>lastend)
return ;
int temp=last[lastend];//根节点
boolean flag=false;
for(int i=midstart;i<=midend;i++){
if(temp==mid[i]){
flag=true;//这一轮是成立的,判断左右子树是否成立
isHaving(mid,midstart,i-1,last,laststart,laststart+i-midstart-1);//判断左子树
isHaving(mid,i+1,midend,last,laststart+i-midstart,lastend-1);//判断右子树
}
}
if(!flag)//根节点不在中序数组里面,说明假设不成立,直接得到答案
result=false;
}
}