码农小汪-剑指Offer之21-二叉搜索树的后序遍历序列

来源:互联网 发布:第八课网络旅行 编辑:程序博客网 时间:2024/06/05 20:40

题目描述

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

题解

首先我们得知道后序遍历的特点,我们的遍历后的字串被分为了三部分,左右根,此题中的二叉搜素树是一个有循序的,很有规律。左边的比右边的大。知道这个之后呢。我们肯定要用递归遍历这个字符串,分成几部分进行不断的缩小处理。直到我们可以处理为止。有点像归并排序的特点。非常的像。

package JianzhiOffer;public class Slution21 {    /**     * 后序遍历的思路     * 左右中间的,可是二叉树是(叉搜索树,二叉排序树 )     * 这个树很有特点,最后一个数把我们的前面的分为两半边,只要都是满足就成功了     * @param sequence     * @return     */    public boolean VerifySquenceOfBST(int[] sequence) {        if(sequence.length==0){            return false;        }        int start=0;        int end=sequence.length-1;        return findWrong(sequence, start, end);    }    public boolean findWrong(int[]sequence,int start,int end){        if(start>=end){            //都相聚在一起了肯定成功啦            return true;        }        int i,j;        for( i=start;i<end;i++){            if(sequence[i]>sequence[end]){                //前面的肯定比我们 的最后个元素小                break;            }            //找到分界线之后,只要发现还有比最后个小的就是说明不是后序遍历        }        for(j=i;j<end;j++){            if(sequence[j]<sequence[end]){                return false;            }        }        /**         * 递归的去寻找这种状态         */       return findWrong(sequence,start,i-1)&&findWrong(sequence,i,end-1);    }}
0 0
原创粉丝点击