zoukankan      html  css  js  c++  java
  • 二叉搜索树的后序遍历序列

    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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);
    
        }
  • 相关阅读:
    flowable的多人会签和一票否决
    排序
    Java数组的三种打印方式
    CF446B DZY Loves Modification(优先队列)
    2019CCPC哈尔滨 Interesting Permutation(思维)
    2019沈阳网络赛 Fish eating fruit (换根dp)
    AcWing287 积蓄程度(换根dp)
    CF1358E Are You Fired?(前缀和+贪心)
    android android studio error
    cocos2D-X 打包
  • 原文地址:https://www.cnblogs.com/wft1990/p/7456504.html
Copyright © 2011-2022 走看看