• 【剑指offer23 二叉搜索树的后序遍历序列】


    题目描述

    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
     
    二叉搜索树,中序遍历的最后一个元素是中间值,找到前一半比它小的,后一半比他大。
    如果不满足一半小一半大,就false
    满足就递归左右部分
     
    class Solution {
    public:
        
        bool judge(vector<int>& a, int l, int r){
            if(l >= r) return true;
            int i = r;
            while(i > l && a[i - 1] > a[r]) --i;//到达分界点的比头大的元素
            for(int j = i - 1; j >= l; --j) if(a[j] > a[r]) return false;
            return judge(a, l, i - 1) && (judge(a, i, r - 1));
        }
        
        bool VerifySquenceOfBST(vector<int> sequence) {
            if(!sequence.size()) return false;
            return judge(sequence, 0, sequence.size() - 1);
            
            
            
            /* CLion能过 但是 这上面过不了
            //return false;
            if(sequence.empty())return false;
            int len = sequence.size();
            if(len<=2)return true;
            
            int tou = sequence[len-1]; // 此时二叉树的头
            int flag = 0; //在某个位置前面 都应该比tou小  后面的都比头大
            int flag_i ;
            for(int i=0 ; i<len-1 ; ++i){
                if(sequence[i]<tou)flag_i=i;//会到最后一个比tou小的地方
                if(sequence[i]>tou)flag=1;//只要出现了比头大的  后面就应该都要大
                if(flag == 1 && sequence[i]<tou)return false;//后面出现比头小的了
            }
            vector<int> sequence_front , sequence_back;
            for(int i=0 ; i <=flag_i ; ++i)sequence_front.push_back(sequence[i]);
            for(int i=flag_i+1 ; i <len-1 ; ++i)sequence_back.push_back(sequence[i]);
            return VerifySquenceOfBST(sequence_front) && VerifySquenceOfBST(sequence_back);
            */
        }
    };
  • 相关阅读:
    squid开多端口代理的心得
    用ssh跑pppd(最简单的linuxvpn)
    Asterisk1.2编译与安装
    E1 CE1 PRI BRI T1 的区别
    asterisk卡常见问题(收集整理)
    CCProxy+Eborder开透明代理详细设置(附图文)
    iptables+NAT+squid 透明代理上网实现方案
    asterisk积累命令
    MySQL Cluster的常见问题
    如何配置Silverlight4开发环境
  • 原文地址:https://www.cnblogs.com/Stephen-Jixing/p/13129475.html
Copyright © 2020-2023  润新知