12、二叉搜索树的后序遍历22

0

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。


    public boolean VerifySquenceOfBST(int [] sequence) {
            if(sequence==null||sequence.length==0){
                        return false;
            }
        return verify(sequence, 0, sequence.length-1);
    }
    public boolean verify(int[] sequence,int start,int end){
            System.out.println("进入程序"+start+"  "+end);
            if(start>=end){
                        return true;
            }
            int root=sequence[end];
            //寻找左子树的边界
            int i=start;
            for(;i<end;i++){
                        System.out.println("i~"+i);
                        if(sequence[i]>root){
                                    break;
                        }
            }
            System.out.println("for后i="+i);
            //寻找右子树有没有小于根节点的节点
            int j=i+1;
            for(;j<end;j++){
                        if(sequence[j]<root){
                                    return false;
                        }
            }

            boolean left=true;
            System.out.println("进入if之前i="+i);
            if(i>0){
                        System.out.println(start+"  "+(i-1));
                        left=verify(sequence, start, i-1);
            }
            boolean right=verify(sequence, i, end-1);
                        return left&&right;    
    }