// 题目:输入一个数组,判断是不是二叉搜索树的后序遍历结果
// 解法:最后一个结点是根结点,前面所有结点小于根节点,后面所有节点大于根节点值
public class Main {
public static void main(String[] args) {
System.out.println(checkSeq(new int[] { 5,7,9,11,10,8}));
}
private static boolean checkSeq(int[] input) {
if(input.length <= 0){
return false;
}
int cut = -1;
int value = input[input.length-1];
for(int i = 0;i<input.length-1;i++){ //找到左子树和右子树的分界点
if(input[i]>=value){
cut = i;
break;
}
}
if(cut == -1){ //如果只有左子树则直接成功
return true;
}
for(int i = cut;i<input.length-1;i++){ //如果右子树有结点比根节点小,则直接返回false
if(input[i]<=value){
return false;
}
}
boolean left = true;
if(cut>0){
left = checkSeq(Arrays.copyOfRange(input, 0, cut)); //考虑左边的数组
}
boolean right = true;
if(cut<input.length-1){
right = checkSeq(Arrays.copyOfRange(input, cut, input.length-1)); //检查右边的数组
}
return left && right;
}
}
剑指offer 24. 二叉搜索树的后序遍历序列
最新推荐文章于 2024-09-21 10:38:43 发布