题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结 果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相 同。
思路:先找到右子树的开始位置,然后分别进行左右子树递归处理
package Function;
import java.util.Arrays;
//先找到右子树的开始位置,然后分别进行左右子树递归处理。
//后序遍历中最后一个数字为根节点
//左子树均比根节点小,右子树均比根节点大
public class VerifySquenceOfBST33 {
public boolean VerifySquenceOfBST(int[] sequence) {
if (sequence == null || sequence.length == 0) {
return false;
}
int rstart = 0;
int rootIndex = sequence.length - 1;
for (int i = 0; i < rootIndex; i++) {
if (sequence[i] < sequence[rootIndex])
rstart++;
}
if (rstart == 0) {
VerifySquenceOfBST(Arrays.copyOfRange(sequence,0,rootIndex));
return true;
}
for (int i = rstart; i < rootIndex; i++) {
if (sequence[i] <= sequence[rootIndex]) {
return false;
}
}
VerifySquenceOfBST(Arrays.copyOfRange(sequence,0,rstart));
VerifySquenceOfBST(Arrays.copyOfRange(sequence,rstart,rootIndex));
return true;
}
}