题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
int length=sequence.length;
if(length==0){
return false;
}
if(length==1){
return true;
}
return judge(sequence,0,length-1);
}
private boolean judge(int[] sequence, int start, int end) {
if(start>=end){
return true;
}
int i=start;
while(sequence[i]<sequence[end]){
i++;
}
for(int j=i;j<end;j++){
if(sequence[j]<sequence[end]){
return false;
}
}
return judge(sequence,start,i-1)&&judge(sequence,i,end-1);
}
}
利用二叉搜索树左子节点小于根节点,右子节点大于根节点的值
采用分治的思想,后序遍历的最后一个节点是根节点,分为左子树和右子树