zoukankan      html  css  js  c++  java
  • 剑指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);
        }

  • 相关阅读:
    比较两个集合元素是否相同?
    如何将list集合转成String对象
    如何对金额进行判断
    微信网页授权
    什么是微信小程序?简单介绍
    关于买家买入一件商品以后需要进行的逻辑
    设置快捷的模板的生成
    IDEA优秀插件分享之---Mybatis Log Plugin
    破解Beyond Compare 4
    JPA-save()方法会将字段更新为null的解决方法
  • 原文地址:https://www.cnblogs.com/trouble-easy/p/12966629.html
Copyright © 2011-2022 走看看