剑指offer题22

package jianzhioffer;

import java.util.Scanner;

/**
 * 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
 * 如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
 * 二叉搜索树==二叉查找树==二叉排序树
 *
 */
public class Solution22 {
	
	
	/**递归方法:
	 *对于后序遍历来说,序列数组的最后一个元素一定是根节点,
	 *则根据这个元素,将前面的数组分为左、右两个部分,左侧部分都小,右侧部分都大,
	 *确定根节点,从左遍历第一个比根节点大的元素左侧为左子树;右侧为右子树。
	 *如果右侧部分有比该根节点小的元素,那么就不是后序遍历,如此递归进行.
	 */
/*	public static boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence.length == 0 || sequence == null){
        	return false;
        }
        boolean flag = isBST(sequence,0,sequence.length -1); 
        
        return flag;
		
    }
	
	private static boolean isBST(int[] array, int start, int end) {
		if(start>=end){
			return true;
		}
		int root = array[end]; //当前区间的数组中根节点
		int i; //
		for(i = start; i0){ //从右到左依次判断每个节点
			while(sequence[i] < sequence[n]){
				i++;  //统计所有比该节点小的元素个数
			}
			while(sequence[i] > sequence[n]){
				i++;   //统计所有比该节点大的元素个数
			}
			if(i

你可能感兴趣的:(编程语言,Java,数据结构)