树五:二叉搜索树的后序遍历序列

/**
 * 题目:二叉搜索树的后序遍历序列
 * 描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同
 *   二叉搜索树,又叫二叉排序树,它或者是一颗空树,或者具有以下性质:
 *   若他的左子树都不为空,则左子树上所有结点的值均小于他根结点的值,
 *  若他的右子树都不为空,则左子树上所有结点的值均大于他根结点的值,
 *  且左右子树都是后续遍历序列
 *     截取数组一部分用Arrays.copyOfRange(sequeue,o,i);
 * 方案:判断其输入的数组是否满足其性质即可  
 * */

public class Five {
    
    public static boolean one(int[] sequeue) {
        if(sequeue == null || sequeue.length == 0) {
            return false;
        }
        int root = sequeue[sequeue.length-1];        
        int i =0;
        for(;i<sequeue.length-1;i++) {  //判断左子树
            if(sequeue[i] >root) {
                break;
            }
        }
        int j =i;
        for(;j<sequeue.length-1;i++) {  //判断右子树
            if(sequeue[j] <root) {
                return false;
            }
        }        
        boolean left = true;
        if(i>0) {
            left = one(Arrays.copyOfRange(sequeue, 0, i));
        }
        boolean right = true;
        if(j < sequeue.length-1) {
            right = one(Arrays.copyOfRange(sequeue, j, sequeue.length-1));
        }
        
        
        return left && right;
    }

}

猜你喜欢

转载自www.cnblogs.com/ZeGod/p/9969502.html
今日推荐