二叉搜索树的后序遍历序列(回看)

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

public class Solution {
    public boolean _VerifySquenceOfBST(int [] sequence,int start,int end){
        if(start >= end)
            return true;
        int root = sequence[end];
        int i = start;
        while(i < end){
            if(sequence[i] > root)
                break;
            i++;
        }
        int j = i;
        while(j < end){
            if(sequence[j] < root)
                return false;
            j++;
        }

        return _VerifySquenceOfBST(sequence,start,i-1) && _VerifySquenceOfBST(sequence,i,end-1);       
    }
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence.length == 0)
            return false;
        return _VerifySquenceOfBST(sequence,0,sequence.length-1);
    }
}

还有疑问,最终的结束条件为什么start == end 就不行呢?当案例为{4,6,7,5}的时候就可以看到:
(此时start为0,end为3)
一开始i处的值为1,左边4的是start为0,i-1为0,下一次递归的start和end是一样的,true!
右边,start为1,end-1为2,是{6,7}元素,下一轮递归是:
————7为root,i的值指向7,
————所以左边为6,start和i-1都指向6,返回true。
————右边i指向7,end-1指向6,这时候end > start!

我使用四个下标分别标记两个数组的开始和结束也是不行.应该也是同样的作用吧!

关键的点是:别忘了i的作用,考虑或者测试的时候不能只想着函数开始时候的start和end,还得考虑调用处的两个值,关键的还有i的取值,因为它影响着这两个值!

参考:
https://blog.csdn.net/u013238950/article/details/50827977

猜你喜欢

转载自blog.csdn.net/xuchonghao/article/details/80148149
今日推荐