您的位置:首页 > Web前端

剑指offer 24. 二叉搜索树的后序遍历序列

2017-05-09 08:59 316 查看
// 题目:输入一个数组,判断是不是二叉搜索树的后序遍历结果
// 解法:最后一个结点是根结点,前面所有结点小于根节点,后面所有节点大于根节点值
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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: