算法-剑指offer-二叉搜索树的后序遍历序列

来源:互联网 发布:油田开发数据 编辑:程序博客网 时间:2024/06/05 00:13
/*
在后序遍历得到的序列中, 最后一个数字是树的根结点的值。数组中前面的数字可以分为两部分: 
第一部分是左子树结点的值,它们都比根结点的值小: 第二部分是右子树结点的值,它们都比根结点的值大。
*/
public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence.length==0)
            return false;
        return digui(sequence, 0, sequence.length-1);
         
    }
    public boolean digui(int[] sequence,int star,int end){
        if(star>=end)
            return true;
        //先判断左边
        int i = 0;
        for(;i< end ; i++){
            if(sequence[i] > sequence[end])
                break;//判断直到左边大于根,这时候i的位置作为左子树的根,需要递归
        }
        //再判断右边
        int j = i;
        for(;j<end;j++){
            if(sequence[j]<sequence[end])//如果有
                return false;
        }
        //遍历
        return  digui(sequence,star,i-1) &&  digui(sequence, i, end-1);
    }
}