1.构造二叉树,注意&
2.mirror即先右后左
#include<iostream>
#include<cstring>
#include<vector>
#include<map>
#include<cstdio>
#include<algorithm>
using namespace std;
struct Node {
Node *l, *r;
int d;
};
vector<int> pre, tmp, ans;
bool flag = false;
int i;
void insert(Node* &root, int data) {
if(root == NULL) {
root = new Node;
root->d = data;
root->l = root->r = NULL;
return;
}
if(data < root->d) {
insert(root->l, data);
} else insert(root->r, data);
return;
}
void Pre(Node *root) {
if(root == NULL) return;
tmp.push_back(root->d);
if(flag) {
Pre(root->r);
Pre(root->l);
ans.push_back(root->d);
} else {
Pre(root->l);
Pre(root->r);
ans.push_back(root->d);
}
}
int maxL = 1;
int main() {
int n;
cin >> n;
Node *root = NULL;
for(int i=0; i<n; i++) {
int t;
cin >> t;
pre.push_back(t);
insert(root, t);
}
ans.clear();
Pre(root);
if(tmp != pre) {
flag = true;
ans.clear();
tmp.clear();
Pre(root);
}
if(tmp == pre) {
cout << "YES" <<endl;
for(i=0; i<ans.size()-1; i++) {
cout << ans[i] << " ";
}
cout << ans[i] << endl;
} else
cout << "NO" << endl;
return 0;
}