• AcWing 46. 二叉搜索树的后序遍历序列


    地址 https://www.acwing.com/solution/acwing/content/3959/

    题目描述
    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。

    如果是则返回true,否则返回false。

    假设输入的数组的任意两个数字都互不相同。

    样例

    输入:[4, 8, 6, 12, 16, 14, 10]
    
    输出:true

    根据二叉树的定义来看 最后一个是根节点 前面的序列中必须存在一个拐点 拐点前后的值 要么均大于根 要么均小于根
    那么可以将序列与根节点比较,递归逐步缩小序列范围, 注意边界条件 比如全部比根节点大或者全部比根节点小。
    最后设置退出条件。

    class Solution {
    public:
        bool verifySequenceOfBSTInner(vector<int> sequence)
        {
            if(sequence.size() < 1) return true;
            int root =  sequence.back();  
            int flag = 0; int idx = -1;
            for(int i =0 ; i<sequence.size()-1;i++ ){
                if(sequence[i] > root && flag == 0){
                    flag = 1;idx = i;
                }else if(sequence[i] < root && flag == 1){
                    return false;
                }
            }
    
            bool ret1 = true;  vector<int> tmp1;
            if(idx > 0){
                tmp1 = vector<int>(sequence.begin(),sequence.begin()+idx);
                ret1  = verifySequenceOfBSTInner(tmp1); 
            }
    
            bool ret2 = true; vector<int> tmp2;
    
            if(idx < sequence.size()-1){
                tmp2 = vector<int>(sequence.begin()+idx,sequence.end()-1);
                ret2 = verifySequenceOfBSTInner(tmp2);
            }
    
            return ret1&& ret2;
        }
    
        bool verifySequenceOfBST(vector<int> sequence) {
            return verifySequenceOfBSTInner(sequence);
        }
    };
    
    作者:defddr
    链接:https://www.acwing.com/solution/acwing/content/3959/
    来源:AcWing
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    函数指针Demo
    设计模式笔记
    Simple Factory 模式
    百度API操作实例
    如何发邮件不被认定为垃圾邮件的技巧
    DateTimePicker中自定义时间或日期显示格式
    取得指定月份的天数
    DataGridView中的内容太长时换行显示
    Numericupdown控件value值的非空判断
    C#中用SQL语句CreatTable
  • 原文地址:https://www.cnblogs.com/itdef/p/11375602.html
Copyright © 2020-2023  润新知