题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:
获取数组最后一个值,遍历最后一个前面的值——记做last,当出现第一个节点tmp正好大于last节点,则tmp节点后的值必须都大于last,否则返回false。
有两种特殊情况,
1.就是不存在tmp,说明所有的值都比last小;
2.就是tmp是第一个元素,切后面元素都大于last,则直接返回true。
然后再用递归遍历实现。
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence==null||sequence.length==0){
return false;
}
int len = sequence.length;
return verify(sequence,0,len-1);
}
public boolean verify(int seq[],int start,int end){
if(start>=end){
return true;
}
int last = seq[end];
boolean ifstart=false;
int flag = -1;
for(int i=start;i<end;i++){
int element = seq[i];
if(element>last&&!ifstart){
ifstart=true;
flag=i;
}else if(element<last&&ifstart){
return false;
}
}
if(flag==start||flag==-1){
//当剩下所有元素都比最后一个元素大或者都比最后一个元素小,返回成功
return true;
}
return verify(seq,start,flag-1)&&verify(seq,flag,end-1);
}
}