题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
思路:先找出根节点的位置,判断是不是从根节点的位置开始,都小于根节点的值,递归判断,最后一个为根节点的值。
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence==null||sequence.length==0){
return false;
}
return VerifySquenceOfBSTHelp(sequence, 0, sequence.length-1);
}
public boolean VerifySquenceOfBSTHelp(int[] sequeue, int start, int end){
if(start>=end){
return true;
}
int root = sequeue[end];
int rightStart=start;
while(sequeue[rightStart]<root){
rightStart++;
}
int j = rightStart;
while(j<end){
if(sequeue[j]<root){
return false;
}
j++;
}
return VerifySquenceOfBSTHelp(sequeue, 0, rightStart-1)&&VerifySquenceOfBSTHelp(sequeue, rightStart, end-1);
}
}