剑指offer(23)二叉搜索树的后序遍历序列

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);
	}

}

猜你喜欢

转载自blog.csdn.net/hxl0925/article/details/90287320