团体程序设计天梯赛-练习集L2-011 玩转二叉树(构造二叉树+BFS)
2016-06-16 00:26
330 查看
L2-011. 玩转二叉树
时间限制400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数N(<=30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。
输出格式:
在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
输入样例:
7 1 2 3 4 5 6 7 4 1 3 2 6 5 7
输出样例:
4 6 1 7 5 3 2 大体题意: 给你二叉树的中序遍历和前序遍历,然后再将所有非叶结点左右孩子对换,最后层序遍历输出。 思路: 分析下样例,思路很明确,先根据中序遍历和前序遍历用链表的方式构造出二叉树,然后再层序遍历输出即可,只不过这里的层序遍历是先右后左的方式。 构造二叉树用结构体递归做,层序遍历直接bfs即可!
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; int *pre,*in,n; int *ans; int cnt; struct Node{ int v; Node* left,*right; }*root; queue<Node*>q; int cnt2 = 0; Node *build(int *pre,int *in,int len){ if (len == 0)return NULL; Node * node = new Node; node->v = *pre; ++cnt2; if (cnt2==1)root = node; int rootdex = 0; for (; rootdex < n; ++rootdex)if (in[rootdex] == *pre)break; node->left = build(pre+1,in,rootdex); node->right = build(pre+1+rootdex,in+rootdex+1,len-rootdex-1); return node; } void print(){ while(!q.empty())q.pop(); q.push(root); while(!q.empty()){ Node *u = q.front();q.pop(); ans[cnt++] = u->v; if (u->right != NULL)q.push(u->right); if (u->left != NULL)q.push(u->left); } for (int i = 0; i < cnt; ++i){ if (i)printf(" "); printf("%d",ans[i]); } } int main(){ scanf("%d",&n); pre = new int ; in = new int ; ans = new int ; cnt = 0; for (int i = 0; i < n; ++i)scanf("%d",&in[i]); for (int i = 0; i < n; ++i)scanf("%d",&pre[i]); build(pre,in,n); print(); return 0; }
相关文章推荐
- linux-windows碎片问题
- Adobe Photoshop CS6无序列号破解方法
- mnesia 总结
- 读BeautifulSoup官方文档之与bs有关的对象和属性(1)
- SpringMVC与iReport(JasperReports) 整合开发实例教程
- LayoutInflater.inflate()三种重载方法参数解释
- 面试(4)-spring-Spring面试题和答案
- MySQL存储过程详解 mysql 存储过程
- 微信创建自定义目录
- Qt中QFtp获取带有中文的文件名称出现乱码的解决方法(比较巧妙,toLatin1压缩掉了QString自动给每个英文字符加上的那些00字节)
- nodejs+mongodb
- Linux入门级需要掌握的命令
- 个人简述~
- Spring Security3 - MVC 整合教程
- 北漂几年了?感觉如何?后悔了还是更坚定了?
- 使用TinkPHP实现品字形布局
- Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/
- 快学Scala第3章--数组相关操作
- Qt在Linux环境下应用程序字体模糊的解决方法(先改成使用默认字体,然后使用qtconfig配置)
- Please ensure Intel HAXM is properly installed and usable.