1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
using namespace std; const int maxn = 1e5+5; const int INF = 0x3f3f3f3f; const double eps = 1e-6; const int MOD = 1000000007; typedef long long ll; #define pb push_back
vector<int> orign,pre,post,preM,postM; struct { int data; node *left,*right; }; void insert(node *&r,int data) { if (!r) { r = new node; r->left = r->right = NULL; r->data = data; return; } if (data < r->data) { insert(r->left,data); } else { insert(r->right,data); } } void preOrder(node *r,vector<int> &v) { if (!r) return; v.pb(r->data); preOrder(r->left,v); preOrder(r->right,v); } void mirrorPreOrder(node *r,vector<int> &v) { if (!r) return; v.pb(r->data); mirrorPreOrder(r->right,v); mirrorPreOrder(r->left,v); } void postOrder(node *r,vector<int> &v) { if (!r) return; postOrder(r->left,v); postOrder(r->right,v); v.pb(r->data); } void mirrorPostOrder(node *r,vector<int> &v) { if (!r) return; mirrorPostOrder(r->right,v); mirrorPostOrder(r->left,v); v.pb(r->data); } int main() { #ifdef ONLIGE_JUDGE #else freopen("H:\in.txt","r",stdin); #endif int n,t; node *root = NULL; cin >> n; for (int i = 0; i < n; ++i) { cin >> t; orign.pb(t); insert(root,t); } preOrder(root,pre); mirrorPreOrder(root,preM); if (orign == pre) { printf("YESn"); postOrder(root,post); for (int i = 0; i < post.size(); ++i) i ? printf(" %d",post[i]) : printf("%d",post[i]); } else if (orign == preM) { printf("YESn"); mirrorPostOrder(root,postM); for (int i = 0; i < postM.size(); ++i) i ? printf(" %d",postM[i]) : printf("%d",postM[i]); } else { printf("NOn"); } return 0; }
|
近期评论