BST | 1043 BST树与镜像BST树的判断

较为简单。小于大于的都走一遍就可以AC了

#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map>


#define I scanf
#define OL puts
#define O printf
#define F(a,b,c) for(a=b;a<c;a++)
#define FF(a,b) for(a=0;a<b;a++)
#define FG(a,b) for(a=b-1;a>=0;a--)
#define LEN 1010
#define MAX (1<<30)-1
#define V vector<int>

using namespace std;

int pre[LEN];
vector<int> post;
bool isMirror=0;
int n;

void set_post(int a,int b){
    if(a>b)return;
    if(a!=b){
        int i=a+1;
        if(isMirror)
            while(i<=b && pre[i]>=pre[a]) i++;
        else
            while(i<=b && pre[i]<pre[a]) i++;
        int j=i;
        if(isMirror)
            while(j<=b && pre[j]<pre[a]) j++;
        else
            while(j<=b && pre[j]>=pre[a]) j++;
        set_post(a+1,i-1);
        set_post(i,j-1);
    }
    post.push_back(pre[a]);
}

int main(){
//    freopen("1043_3.txt","r",stdin);
    I("%d",&n);
    int i;
    FF(i,n) I("%d",&pre[i]);
    set_post(0,n-1);
    bool isOK=1;
    if(post.size()!=n){
        post.clear();
        isMirror=1;
        set_post(0,n-1);
        if(post.size()!=n)
            isOK=0;
    }
    if(isOK){
        puts("YES");
        FF(i,n){
            O("%d",post[i]);
            if(i!=n-1)
                O(" ");
        }
    }else
        puts("NO");
    return 0;
}
原文地址:https://www.cnblogs.com/TQCAI/p/8530516.html