题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
public class Solution {
public boolean VerifySquenceOfBST(int [] s) {
if(s.length == 0) return false;
return verify(s, 0, s.length - 1);
}
public boolean verify(int[] s, int start, int end) {
if(end <= start || end < 0) return true;
int cut = findCut( s, start, end);
if(cut == Integer.MIN_VALUE) return false;
return verify(s, start, cut - 1) && verify(s, cut, end - 1);
}
public int findCut(int[] s, int start, int end) {
int cut = start, t = s[end];
for(cut=start; cut<end; cut++){
if(cut == end - 1) return end;
if(s[cut] > t) {
for(int test=cut+1; test<end; test++)
if(s[test] < t) return Integer.MIN_VALUE;
break;
}
}
return cut;
}
}
BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。完美的递归定义 : )