剑指Offer面试题33二叉搜索树的后序遍历序列java版

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
分析:在后序遍历序列中,最后一个数字是树的根节点的值。数组中前面的数字可以分为两部分:第一部分是左子树节点的值,它们都比根节点的值小;第二部分是右子树节点的值,它们都比根节点的值大。

所以先取数组中最后一个数,作为根节点。然后从数组开始计数比根节点小的数,并将这些记作左子树,然后判断后序的树是否比根节点大,如果有点不满足,则跳出,并判断为不成立。全满足的话,依次对左子树和右子树递归判断。

代码:

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence==null||sequence.length<=0) return false;
        return verifySquenceOfBST(sequence,0,sequence.length-1);
    }
    private boolean verifySquenceOfBST(int[] sequence,int start,int end){
        if(start>=end) return true;
        int root=sequence[end];
        int i=start;
        while(sequence[i]int j=i;
        while(jif(sequence[j]return false;
            }
            j++;
        }
        boolean left=verifySquenceOfBST(sequence,start,i-1);
        boolean right=verifySquenceOfBST(sequence,i,end-1);
        return left&&right;
    }
}

你可能感兴趣的:(剑指Offerjava版本)