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 82 83 84 85
| #include <cstdio> #include <vector> using namespace std; const int maxn=1010; int n; vector<int> nums; struct Node{ int data; Node* left; Node* right; Node(int d=0,Node* l=NULL,Node* r=NULL):data(d),left(l),right(r){} }; Node* root=NULL; void insert(Node* &r,int x){ if(r==NULL) { r=new Node(x); return; } if(r->data>x){ insert(r->left,x); }else{ insert(r->right,x); } } Node* build(){ Node* r=NULL; for(int i=0;i<n;i++){ insert(r,nums[i]); } return r; } void preOrder(Node* r,vector<int>& v){ if (r==NULL) return; v.push_back(r->data); preOrder(r->left,v); preOrder(r->right,v); } void postOrder(Node* r,vector<int>& v){ if(r==NULL) return; postOrder(r->left,v); postOrder(r->right,v); v.push_back(r->data); } void preMorder(Node* r,vector<int>& v){ if(r==NULL) return; v.push_back(r->data); preMorder(r->right,v); preMorder(r->left,v); } void postMorder(Node* r,vector<int>& v){ if(r==NULL) return; postMorder(r->right,v); postMorder(r->left,v); v.push_back(r->data); } int main(){ scanf("%d",&n); int x; for(int i=0;i<n;i++) { scanf("%d",&x); nums.push_back(x); } root=build(); vector<int> pre,post,preM,postM; preOrder(root,pre); preMorder(root,preM); if(nums==pre) { printf("YES\n"); postOrder(root,post); for(int i=0;i<n;i++){ if (i!=0) printf(" "); printf("%d",post[i]); } }else if(nums==preM){ printf("YES\n"); postMorder(root,postM); for(int i=0;i<n;i++){ if (i!=0) printf(" "); printf("%d",postM[i]); } }else{ printf("NO\n"); } return 0; }
|