package java_jianzhioffer_algorithm;
/**
* 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
* 如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
* @author hexiaoli
* 思考:
* 后续遍历,左右根,从右向左找,在数组中找到第一个比根节点小的元素,
* 作为划分左右子树的分界元素,再分别递归
*/
public class VerifySquenceOfBST {
public static boolean verifySquenceOfBST(int[] sequence){
if(sequence == null || sequence.length < 1 ) {
return false;
}
if(sequence.length == 1 ) {
return true;
}
return verifySquenceOfBST(sequence,0,sequence.length-1);
}
public static boolean verifySquenceOfBST(int[] sequence,int head,int tail){
if(head > tail) {
return true;
}
int index = tail;
//从右向左找,在数组中找到第一个比根节点小的元素,作为划分左右子树的分界元素
while(index>head && (sequence[index-1]>sequence[tail])) {
index--;
}
//如果左子树有比根元素的大的元素,则证明不是后序遍历
for(int j = 0;j < index-1;j++){
if(sequence[j]>sequence[tail]){
return false;
}
}
//分别递归判断左右子树
return verifySquenceOfBST(sequence,head,index-1)&&verifySquenceOfBST(sequence,index+1,tail-1);
}
public static void main(String[] args) {
int[] sequence = {5,7,6,9,11,10,8};
boolean result ;
result = verifySquenceOfBST(sequence);
System.out.println(result);
}
}
剑指offer(23)二叉搜索树的后序遍历序列
猜你喜欢
转载自blog.csdn.net/hxl0925/article/details/90287320
今日推荐
周排行