L2-004. 这是二叉搜索树吗?

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,

  • 其左子树中所有结点的键值小于该结点的键值;
  • 其右子树中所有结点的键值大于等于该结点的键值;
  • 其左右子树都是二叉搜索树。

所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。

给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。

输入格式:

输入的第一行给出正整数N(<=1000)。随后一行给出N个整数键值,其间以空格分隔。

输出格式:

如果输入序列是对一棵二叉搜索树或其镜像进行前序遍历的结果,则首先在一行中输出“YES”,然后在下一行输出该树后序遍历的结果。数字间有1个空格,一行的首尾不得有多余空格。若答案是否,则输出“NO”。

输入样例1:

  1. 7
  2. 8 6 5 7 10 8 11

输出样例1:

  1. YES
  2. 5 7 6 8 11 10 8

输入样例2:

  1. 7
  2. 8 10 11 8 6 7 5

输出样例2:

  1. YES
  2. 11 8 10 7 5 6 8

输入样例3:

  1. 7
  2. 8 6 8 5 10 9 11

输出样例3:

  1. NO
    思路:我们只需要提炼题意几个关键词,首先是根据二叉搜索树的三个特点建树,
    也顺便将其镜像树(原来放左边的放右边)写出来,
    然后对比一下其前序遍历是不是对应给出的数列,是就输出其后序遍历的数列。
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. //二叉搜索树特点:左节点比根节点小,右节点比根节点大
  4. struct Node{
  5. int data;
  6. struct Node *l;
  7. struct Node *r;
  8. };
  9. int s[],v[],tmp;
  10. void create1(Node *root,int x){//建树
  11. Node *p;
  12. if(x<root->data){
  13. if(root->l==NULL){
  14. p=new Node;
  15. p->data=x;
  16. p->l=NULL;
  17. p->r=NULL;
  18. root->l=p;
  19. return ;
  20. }
  21. else
  22. create1(root->l,x);
  23. }
  24. else{
  25. if(root->r==NULL){
  26. p=new Node;
  27. p->data=x;
  28. p->l=NULL;
  29. p->r=NULL;
  30. root->r=p;
  31. return ;
  32. }
  33. else
  34. create1(root->r,x);
  35. }
  36. }
  37. void create2(Node *root,int x){//镜像树
  38. Node *p;
  39. if(x>=root->data){
  40. if(root->l==NULL){
  41. p=new Node;
  42. p->data=x;
  43. p->l=NULL;
  44. p->r=NULL;
  45. root->l=p;
  46. return ;
  47. }
  48. else
  49. create2(root->l,x);
  50. }
  51. else{
  52. if(root->r==NULL){
  53. p=new Node;
  54. p->data=x;
  55. p->l=NULL;
  56. p->r=NULL;
  57. root->r=p;
  58. return ;
  59. }
  60. else
  61. create2(root->r,x);
  62. }
  63. }
  64. void firstvisit(Node *p){//前序遍历:根左右
  65. if(p!=NULL){
  66. v[tmp++]=p->data;
  67. firstvisit(p->l);
  68. firstvisit(p->r);
  69. }
  70. }
  71. void lastvisit(Node *p){//后序遍历:左右根
  72. if(p!=NULL){
  73. lastvisit(p->l);
  74. lastvisit(p->r);
  75. v[tmp++]=p->data;
  76. }
  77. }
  78. int main(){
  79. int n,flag;
  80. Node *root,*toor;
  81. root=NULL;
  82. scanf("%d",&n);
  83. for(int i=;i<n;i++){
  84. scanf("%d",&s[i]);
  85. if(i==)//根节点
  86. {
  87. root=new Node;
  88. root->data=s[i];
  89. root->l=NULL;
  90. root->r=NULL;
  91. toor=new Node;
  92. toor->data=s[i];
  93. toor->l=NULL;
  94. toor->r=NULL;
  95. }
  96. else{
  97. create1(root,s[i]);
  98. create2(toor,s[i]);
  99. }
  100. }
  101. tmp=;
  102. flag=;
  103. firstvisit(root);
  104. for(int i=;i<n;i++){
  105. if(s[i]!=v[i]){
  106. flag=;
  107. break;
  108. }
  109. }
  110. if(flag==){
  111. printf("YES\n");
  112. tmp=;
  113. lastvisit(root);
  114. printf("%d",v[]);
  115. for(int i=;i<n;i++)
  116. printf(" %d",v[i]);
  117.  
  118. }
  119. else{
  120. tmp=;
  121. flag=;
  122. firstvisit(toor);
  123. for(int i=;i<n;i++){
  124. if(s[i]!=v[i]){
  125. flag=;
  126. break;
  127. }
  128. }
  129. if(flag==){
  130. printf("YES\n");
  131. tmp=;
  132. lastvisit(toor);
  133. printf("%d",v[]);
  134. for(int i=;i<n;i++)
  135. printf(" %d",v[i]);
  136. }
  137. else
  138. printf("NO\n");
  139. }
  140. return ;
  141. }

团体程序设计天梯赛-练习集L2-004. 这是二叉搜索树吗的更多相关文章

  1. 团体程序设计天梯赛-练习集L1-017. 到底有多二

    L1-017. 到底有多二 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一个整数“犯二的程度”定义为该数字中包含2的个数与其 ...

  2. PAT 团体程序设计天梯赛-练习集 L1-017. 到底有多二

    一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值.如果这个数是负数,则程度增加0.5倍:如果还是个偶数,则再增加1倍.例如数字“-13142223336”是个11位数,其中有3个2,并且 ...

  3. PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集

    L2-001 紧急救援 (25 分)   作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...

  4. PTA L2-023 图着色问题-前向星建图 团体程序设计天梯赛-练习集

    L2-023 图着色问题 (25 分)   图着色问题是一个著名的NP完全问题.给定无向图,,问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色? 但本题并不是要你解 ...

  5. 团体程序设计天梯赛-练习集L2-010. 排座位

    L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位. ...

  6. 团体程序设计天梯赛-练习集 L1-007 念数字

    - - ->博主推荐,学生党.程序员必备,点击查看- - - >>>>> 热门文章推荐 以下50道算法编程题访问量较大,包含常用语法,数据结构,解题思路等等,作为C ...

  7. 团体程序设计天梯赛-练习集L2-007. 家庭房产

    L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...

  8. PTA L2-002 链表去重 团体程序设计天梯赛-练习集

    L2-002 链表去重(25 分)   给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉.即对每个键值 K,只有第一个绝对值等于 K 的结点被保留.同时,所有被删除的结点须被保存在另 ...

  9. 团体程序设计天梯赛-练习集-L1-045. 宇宙无敌大招呼

    L1-045. 宇宙无敌大招呼 据说所有程序员学习的第一个程序都是在屏幕上输出一句“Hello World”,跟这个世界打个招呼.作为天梯赛中的程序员,你写的程序得高级一点,要能跟任意指定的星球打招呼 ...

  10. 团体程序设计天梯赛-练习集-*L1-043. 阅览室

    L1-043. 阅览室 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为不超过100 ...

随机推荐

  1. Cocos2d-x优化中关于背景图片优化

    由于背景图片长时间在场景中保存,而且图片很多,我们可以对其进行一些优化.我们通过如下几个方面考虑优化:1.不要Alpha通道背景图片的特点是不需要透明的,所以纹理格式可以采用不带有Alpha通道格式, ...

  2. iOS开发——锁屏监听

    公司所做的项目,锁屏监听是为了60秒后,解锁瓶后显示[手势解锁]或[指纹验证]: 第一步:AppDelegate.m 头部导入 #import <notify.h> #define Not ...

  3. 读<<CLR via C#>> 详谈泛型

    1,什么是泛型? 答:泛型是类型的模板,类型是实例(对象)的模板.C#提供了5种泛型:类,接口,委托,结构和方法. 2,使用泛型有什么好处? 答:继承实现的是"代码重用",而泛型实 ...

  4. java集合 collection-list-ArrayList 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。

    import java.util.*; /* 将自定义对象作为元素存到ArrayList集合中,并去除重复元素. 比如:存人对象.同姓名同年龄,视为同一个人.为重复元素. 思路: 1,对人描述,将数据 ...

  5. 按按钮调用PHP function函数

    首先,请大家看一段HTML代码: <html> <head> </head> <body> <input type=button on_click ...

  6. 将C# dataTable 做为参数传入到存储过程

    1.list转换为DataTable(如果有需要) public static DataTable ListToDataTable<T>(List<T> entitys) { ...

  7. C++ 对数组sizeof 和对数组元素sizeof

    这一段程序 下面这段程序很有看点://arr1 is an array of intsint *source=arr1;size_t sz=sizeof(arr1)/sizeof(*arr1);//n ...

  8. input onfocus onblur

    <input type="text" style="color:#999" value="账户" onfocus='if(this.v ...

  9. 《Visual C++ 程序设计》读书笔记 ----第8章 指针和引用

    1.&取地址:*取内容. 2.指针变量“++”“--”,并不是指针变量的值加1或减1,而是使指针变量指向下一个或者上一个元素. 3.指针运算符*与&的优先级相同,左结合:++,--,* ...

  10. [旧博客]QQ旋风加速漏洞

    漏洞是这样的,用开通QQ会员的账号登录QQ旋风,添加要下载的任务,启动加速后,注销,登录lixian.qq.com 删除刚才添加的离线任务,这时QQ旋风还是在加速那个任务.而你又可以登录QQ旋风添加其 ...