代码:
#include<cstdio>
#include<vector>
using namespace std;
struct Node{
int data;
Node *left;
Node *right;
};
int n;
vector<int> pre,post,mpre,mpost,origion;
void InsertNode(Node *&root,int number)
{
if(root==NULL)
{
root=new Node;
root->data=number;
root->left=root->right=NULL;
return ;
}
if(number<root->data)
{
InsertNode(root->left,number);
}
else
InsertNode(root->right,number);
}
void pret(Node* root,vector<int> &vi)
{
if(root==NULL)
return;
vi.push_back(root->data);
pret(root->left,vi);
pret(root->right,vi);
}
void mpret(Node* root,vector<int> &vi)
{
if(root==NULL)
return;
vi.push_back(root->data);
mpret(root->right,vi);
mpret(root->left,vi);
}
void postt(Node* root,vector<int> &vi)
{
if(root==NULL)
return;
postt(root->left,vi);
postt(root->right,vi);
vi.push_back(root->data);
}
void mpostt(Node* root,vector<int> &vi)
{
if(root==NULL)
return;
mpostt(root->right,vi);
mpostt(root->left,vi);
vi.push_back(root->data);
}
int main()
{
scanf("%d",&n);
int value;
Node *root=NULL;
for(int i=1;i<=n;i++)
{
scanf("%d",&value);
origion.push_back(value);
InsertNode(root,value);
}
pret(root,pre);
postt(root,post);
mpostt(root,mpost);
mpret(root,mpre);
if(origion==pre)
{
printf("YES\n");
for(int i=0;i<n;i++)
{
printf("%d",post[i]);
if(i<n-1)
printf(" ");
}
}
else if(origion==mpre)
{
printf("YES\n");
for(int i=0;i<n;i++)
{
printf("%d",mpost[i]);
if(i<n-1)
printf(" ");
}
}
else
{
printf("NO\n");
}
}