/**
* 题目:二叉搜索树的后序遍历序列
* 描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同
* 二叉搜索树,又叫二叉排序树,它或者是一颗空树,或者具有以下性质:
* 若他的左子树都不为空,则左子树上所有结点的值均小于他根结点的值,
* 若他的右子树都不为空,则左子树上所有结点的值均大于他根结点的值,
* 且左右子树都是后续遍历序列
* 截取数组一部分用Arrays.copyOfRange(sequeue,o,i);
* 方案:判断其输入的数组是否满足其性质即可
* */
public class Five { public static boolean one(int[] sequeue) { if(sequeue == null || sequeue.length == 0) { return false; } int root = sequeue[sequeue.length-1]; int i =0; for(;i<sequeue.length-1;i++) { //判断左子树 if(sequeue[i] >root) { break; } } int j =i; for(;j<sequeue.length-1;i++) { //判断右子树 if(sequeue[j] <root) { return false; } } boolean left = true; if(i>0) { left = one(Arrays.copyOfRange(sequeue, 0, i)); } boolean right = true; if(j < sequeue.length-1) { right = one(Arrays.copyOfRange(sequeue, j, sequeue.length-1)); } return left && right; } }