题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
//先判断是否为空的列表
if(sequence == null||sequence.length == 0){
return false ;
}
return Verify(sequence,0,sequence.length);
}
private boolean Verify(int [] sequence,int start,int end){
//如果进来的树是后序遍历的,取出根节点
int root = sequence[end-1];
//遍历数组,找到比根节点小的,就是它的左子树,最后一位根节点不用进行遍历
int i;
for(i = 0;i < end-1;i++){
if(sequence[i]>root){
break;
}
}
//遍历数组,找到比根节点大的,就是它的右子树,最后一位根节点不用进行遍历
int j;
for(j = i;j < end-1;j++){
if(sequence[j]<root){
return false;
}
}
//左递归进行遍历查询左节点
boolean left = true;
if(i>0){
left = Verify(sequence,start,i-start);
}
//右递归进行遍历查询右节点
boolean right = true;
if(j<end-1){
right = Verify(sequence,end-i-1,end-1);
}
return left&&right;
}
}