输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
本来的思路是找到大于小于root的两个分界点,然后让midleft+1==midright;后来发现这种思路有BUG,如果不存在分界点的话那个等式不成立。于是改为从后往前遍历,找到临界点,然后临界点之前的数字必须满足<array[root]。
然后递归即可,注意临界值。
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
boolean ans=false;
if(sequence.length==0)
return false;
if(sequence.length==1)
return true;
return Judge(sequence,0,sequence.length-1);
}
public static boolean Judge(int[] array,int start,int end) {
if(start>=end)
return true;
int i=end;
while(i>=start&&array[i]>=array[end]){
i--;
}
for(int j=0;j<=i;j++){
if(array[j]>array[end])
return false;
}
return Judge(array,start,i)&&Judge(array,i+1,end-1);
}
}
.