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);
    
        }
  • 相关阅读:
    codeforces C. No to Palindromes!
    codeforces D. Pashmak and Parmida's problem
    codeforces C. Little Pony and Expected Maximum
    codeforces D. Count Good Substrings
    codeforces C. Jzzhu and Chocolate
    codeforces C. DZY Loves Sequences
    codeforces D. Multiplication Table
    codeforces C. Painting Fence
    hdu 5067 Harry And Dig Machine
    POJ 1159 Palindrome
  • 原文地址:https://www.cnblogs.com/wft1990/p/7456504.html
Copyright © 2011-2022 走看看