思路:
假设该数组是二叉搜索树的后序遍历结果。那么根据后插排序树的数据结构特点:该数组的前半部分数据为左子树中数据,后半部分为右子树中的数据,最后为根节点。而根据二叉树的特点:左子树小于根节点右子树大于根节点,从这个特点为出发点对数据进行遍历数组,如果当一个数小于后一个数,则后一个数的后半部分为右子树,如果右子树有小于根节点的则不符合,具体代码如下:
public boolean judge(int[]a,int s,int e){
if(s>=e)//如果遍历到最后没有false,则符合
return true;
int i;
int j;
for(i=s;i<e;i++){
if(a[i]>a[e])//找到右节点的起始索引i
break;
}
for(j=i;j<e;j++){
if(a[j]<a[e])//如果右节点中小于根节点则不符合
return false;
}
//分别对左子树和右子树再进行遍历
return judge(a,s,i-1) && judge(a,i,e-1);
}