剑指offer22-二叉搜索树的后续遍历序列

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

思路:符合二叉搜索树的后续遍历序列应该具备这样的特点:

序列划分为三部分,第一部分左侧,比最后一个元素小;

第二部分右侧,壁最后一个元素大;

第三部分,最后一个元素。

那么判断一个序列是否是该序列的方法:从序列左侧开始访问,标记第一个比最后一个元素大的元素,从此元素开始,到最后一个元素前一个元素,若遇到比最后一个元素小的元素则不符合。

递归方式:

    bool VerifySquenceOfBST(vector<int> sequence) {
        //二叉搜索树后序遍历
        if(sequence.empty()) return false;
       return Verify(sequence,0,sequence.size()-1);
    }
    bool Verify(vector<int>seq,int left,int right)
    {
        if(left>=right) return true;
        int mid;
        for(int i=left;i<right;i++)
        {
            if(seq[i]>=seq[right])
            {
                mid=i-1;
                break;
            }
            
        }
        for(int i=mid+1;i<right;i++)
        {
            if(seq[i]<seq[right])
                return false;
        }
        return Verify(seq,left,mid)&&Verify(seq,mid+1,right-1);
    }

原文地址:https://www.cnblogs.com/trouble-easy/p/12966629.html