题目:
输入输出要求:
源代码:
#include <stdio.h>
#include<math.h>
int num1=0;
int x1[1005];
typedef struct tree{
int data;
struct tree *left,*right;
}tree;
tree* build(tree *s,int n){
if(s==NULL)
{
s=(tree*)malloc(sizeof(tree));
s->data=n;
s->left=NULL;
s->right=NULL;
}
else
{
if(n<s->data)
{
s->left=build(s->left,n);
}
else
{
s->right=build(s->right,n);
}
}
return s;
}
tree* buildfan(tree *s,int n){
if(s==NULL)
{
s=(tree*)malloc(sizeof(tree));
s->data=n;
s->left=NULL;
s->right=NULL;
}
else
{
if(n>=s->data)
{
s->left=buildfan(s->left,n);
}
else
{
s->right=buildfan(s->right,n);
}
}
return s;
}
void xian(tree *p)
{
if(!p)
return ;
else
{
x1[num1++]=p->data;
xian(p->left);
xian(p->right);
}
}
void hou(tree *bt)
{
if(bt)
{
hou(bt->left);
hou(bt->right);
x1[num1++]=bt->data;
}
}
int main()
{
int n;
scanf("%d",&n);
int x[n];
tree *btl=NULL,*btr=NULL;
for(int i=0;i<n;i++)
{
scanf("%d",&x[i]);
btl=build(btl,x[i]);
btr=buildfan(btr,x[i]);
}
xian(btl);
int flag1=1;
for(int i=0;i<n;i++)
{
if(x1[i]!=x[i])
{
flag1=0;
break;
}
}
if(flag1)
{
num1=0;
printf("YES\n");
hou(btl);
for(int i=0;i<num1;i++)
{
if(i!=0)
printf(" %d",x1[i]);
else
printf("%d",x1[i]);
}
return 0;
}
flag1=1;
num1=0;
xian(btr);
for(int i=0;i<n;i++)
{
if(x1[i]!=x[i])
{
flag1=0;
break;
}
}
if(flag1)
{
num1=0;
printf("YES\n");
hou(btr);
for(int i=0;i<num1;i++)
{
if(i!=0)
printf(" %d",x1[i]);
else
printf("%d",x1[i]);
}
}
else
printf("NO");
return 0;
}