二叉搜索树后续遍历的结果

问题:

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

解决:

① 在后序遍历得到的序列中,最后一个值是树的根节点,数组中前面的数字可以分为两部分,第一部分是左子树节点的值,均小于根节点,第二部分是右子树节点的值,它们都比根节点的值大。只需要先找到第一个大于根节点的值,然后判断右子树中是否有小于根节点的数,若有,返回false;若没有,递归判断左右子树。

public class Solution {//判断是否能构成二叉搜索树
    public boolean VerifySquenceOfBST(int [] sequence) {
        if (sequence == null || sequence.length <= 0){
            return false;
        }
        return VerifySquenceOfBST(sequence,0,sequence.length - 1);
    }
    public boolean VerifySquenceOfBST(int[] sequence,int start,int end){
        if (start >= end) return true;//所有的数据都处理完成
        int i = start;
        while(i < end - 1 && sequence[i] < sequence[end]){
            i ++;
        }
        int j = i;
        while(j < end - 1 && sequence[j] > sequence[end]){
            j ++;
        }
        if (j != end - 1){
            return false;
        }
        return VerifySquenceOfBST(sequence,start,i - 1) && VerifySquenceOfBST(sequence,i,end - 1);
    }
}

猜你喜欢

转载自my.oschina.net/liyurong/blog/1631559