时间限制:1秒
空间限制:32768K
热度指数:109215
算法知识视频讲解
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:数组的末尾肯定是 树的根 从头开始遍历数组 找到第一个比根节点大的值 也就是划分了左子树和右子树的界限,然后遍历右子树,如果右子树中出现了比根节点小的值 则返回false 然后递归左子树 递归右子树。
import java.util.Arrays;
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
int length = sequence.length;
if(sequence == null || length <= 0)
return false;
int root = sequence[length-1];
int i = 0;
//判断左子树第一个大于root的值
for(;i<length-1;i++){
if(sequence[i] > root)
break;
}
int j = i;
//如果右子树出现了小于root的值 直接返回false
for(;j<length-1;j++){
if(sequence[j]<root)
return false;
}
boolean left = true;
//递归左子树
if(i > 0){
//Arrays.copyOfRange()数组的截取函数
left = VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, i));
}
//递归右子树
boolean right = true;
if(i < length - 1){
right = VerifySquenceOfBST(Arrays.copyOfRange(sequence, i, length-1));
}
return left && right;
}
}