美文网首页
Is It a Binary Search Tree (25)

Is It a Binary Search Tree (25)

作者: 刷爆服务器 | 来源:发表于2018-06-14 01:46 被阅读0次
#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
int N;
vector<int> pre,post;
bool isMirror=false;
void getpost(int root,int tail) {
    if(root>tail) return;
    int i=root+1,j=tail;
    if(!isMirror) {
        while(i<=tail&&pre[root]>pre[i]) i++;
        while(j>root&&pre[root]<=pre[j]) j--;
    } else {
        while(i<=tail&&pre[root]<=pre[i]) i++;
        while(j>root&&pre[root]>pre[j]) j--;
    }
    if(i-j!=1) return;
    getpost(root+1,j);
    getpost(i,tail);
    post.push_back(pre[root]);
}
int main() {
    cin>>N;
    pre.resize(N);
    for(int i=0; i<N; i++) {
        cin>>pre[i];
    }
    getpost(0,N-1);
    if(post.size()!=N) {
        isMirror=true;
        post.clear();
        getpost(0,N-1);
    }
    if(post.size()==N) {
        printf("YES\n%d",post[0]);
        for(int i=1; i<N; i++)
            printf(" %d",post[i]);
    } else
        printf("NO");
}

相关文章

网友评论

      本文标题:Is It a Binary Search Tree (25)

      本文链接:https://www.haomeiwen.com/subject/uhheeftx.html