http://www.patest.cn/contests/pat-a-practise/1043

 #include <stdio.h>
#include <vector>
using namespace std; struct Node
{
Node* lchild;
Node* rchild;
int val;
}Tree[]; int loc,loc2,loc3;
Node* create()
{
Tree[loc].lchild=NULL;
Tree[loc].rchild=NULL;
return &Tree[loc++];
} Node* insert1(Node* T,int v)//二叉排序树构建
{
if(T==NULL)
{
T=create();
T->val=v;
}
else
{
if(v<T->val) T->lchild=insert1(T->lchild,v);
else T->rchild=insert1(T->rchild,v);
}
return T;
} Node* insert2(Node* T,int v)//镜像二叉排序树构建
{
if(T==NULL)
{
T=create();
T->val=v;
}
else
{
if(v>=T->val) T->lchild=insert2(T->lchild,v);
else T->rchild=insert2(T->rchild,v);
} return T;
} void preorder(Node *T,int ans[])
{ if(T!=NULL)
{
ans[loc2++]=T->val;
if(T->lchild!=NULL) preorder(T->lchild,ans);
if(T->rchild!=NULL) preorder(T->rchild,ans);
}
} void postorder(Node* T,int ans[])
{
if(T!=NULL)
{
if(T->lchild!=NULL) postorder(T->lchild,ans);
if(T->rchild!=NULL) postorder(T->rchild,ans);
ans[loc3++]=T->val;
}
} bool compare(int a[],int b[],int n)//比较序列
{
bool bo=true;
for(int i=;i<n;i++)
{
if(a[i]!=b[i])
{
bo=false;break;
}
} return bo;
} int main()
{
int n,i;
//二叉排序树的前序就是构建树的插入顺序
//所以只要按照前序建立二叉排序树 和 镜像二叉排序树,得出两者的前序
//与输入的序列比较,如果其中之一相等,则YES,并输出该树的中序。否则,NO。
while(scanf("%d",&n)!=EOF)
{
getchar();
int v1[];//存储 输入序列
int pre1[];//存储 二叉排序树的前序
int pre2[];//存储 镜像二叉排序树的前序
int post[];//存储 后序遍历
loc=; loc3=;
Node *T1=NULL,*T2=NULL;
for(i=;i<n;i++)//建树
{
scanf("%d",&v1[i]);
T1=insert1(T1,v1[i]);
T2=insert2(T2,v1[i]);
}
getchar();
loc2=;
preorder(T1,pre1);
loc2=;
preorder(T2,pre2);
bool b1=compare(v1,pre1,n),b2=compare(v1,pre2,n); if(!b1&&!b2)
{
printf("NO\n");
}
else
{
printf("YES\n");
if(b1) postorder(T1,post);
else postorder(T2,post); for(i=;i<n;i++)
printf("%d%c",post[i],i==n-?'\n':' ');
}
}
return ;
}

最新文章

  1. ReceiveQueue
  2. HDU3535AreYouBusy[混合背包 分组背包]
  3. java实现身份证校验
  4. jdbc 连接 oracle rac
  5. CodeIgniter 3之Session类库(3)(转)
  6. springMVC学习(1)
  7. Javascript quiz
  8. keytool 生成 Android SSL 使用的 BKS
  9. New 和 GetMem 的不同之处
  10. 分布式事务、XA、两阶段提交、一阶段提交
  11. 如何学习java
  12. IntelliJ Idea 2017 免费激活方法
  13. 2019-04-27 Python之有关文件的学习
  14. Node.js知识点总结
  15. Ubuntu之sudo权限管理/etc/sudoers文件
  16. AIOps 平台的误解,挑战及建议(下)— AIOps 挑战及建议
  17. redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error(转)
  18. vue:资源小记
  19. 两道SQL题目
  20. MySQL程序之mysqldump详解

热门文章

  1. HTML+CSS实例——漂亮的查询部件(一)
  2. 安装 tomat
  3. VMware系统运维(一)安装Esxi
  4. CentOS(八)--crontab命令的使用方法
  5. 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项.试图加载格式不正确的程序
  6. CSS3 动画记
  7. JMS - 事务性消息
  8. php中preg_match用户名正则实例
  9. 谷歌(Chrome)安装Advanced REST Client插件
  10. Swift数字类型之间的转换