二叉搜索树的后序遍历序列

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

     * 递归实现检测
     *
     * 对于后序遍历来说,序列数组的最后一个元素一定是根节点,
     * 则根据这个元素,将前面的数组分为左、右两个部分,左侧部分都小,右侧部分都大,
     * 如果右侧部分有比该根节点小的元素,那么就不是后序遍历,如此递归进行(左半部分在上一步骤已经比较过了,所以不需要比较啦)
 
bool search(vector<int>&a,int start,int end)
    {
        if(start>end)//遍历完数组的一部分,没有报错,返回true
        {
            return true;
        }
        int i;
        int rootVal=a[end];//根节点的值
        for(i=start;i<end-1;i++)//从左到右找第一个大于根节点的值(即将数组分为两部分,左边小于根,右边大于根)
            if(a[i]>rootVal)
               break;
        //从位置i此处去遍历数组,如果出现小于根节点的值,则返回false
        for(int j=i;j<end-1;j++)
            if(a[j]<rootVal)
                return false;
        //确保左右子树部分仍然是后续序列
        return search(a,start,i-1)&&search(a,i,end-1);
    }
    bool VerifySquenceOfBST(vector<int> sequence) {
        if(sequence.size()==0)
            return false;
        if(sequence.size()==1)
            return true;
        int len=sequence.size();
        
        return search(sequence,0,len-1);

    }
原文地址:https://www.cnblogs.com/wft1990/p/7456504.html