【剑指Offer面试编程题】题目1521:二叉树的镜像--九度OJ
来源:互联网 发布:网络社区营销 编辑:程序博客网 时间:2024/06/06 03:13
- 题目描述:
输入一个二叉树,输出其镜像。
- 输入:
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000,n代表将要输入的二叉树节点的个数(节点从1开始编号)。接下来一行有n个数字,代表第i个二叉树节点的元素的值。接下来有n行,每行有一个字母Ci。
Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。
Ci=’l’表示第i个节点有一个左孩子,紧接着是左孩子的编号。
Ci=’r’表示第i个节点有一个右孩子,紧接着是右孩子的编号。
Ci=’z’表示第i个节点没有子孩子。
- 输出:
对应每个测试案例,
按照前序输出其孩子节点的元素值。
若为空输出NULL。
样例输入:
78 6 10 5 7 9 11d 2 3d 4 5d 6 7zzzz样例输出:
8 10 11 9 6 7 5【解题思路】这道题目的思路应该还是比较清晰的,这里所谓的镜像无非就是树的所有的节点的左右子树对调。要求输出镜像树的先序遍历,我们很容易想到只需要将正常树的前序遍历算法稍作修改即可。只需要将遍历顺序:根-左-右,变为:根-右-左。即可完成任务。
当然前面的数据输入,建树的过程就不做多说了,应该还是比较简单的。中间需要利用set数据结构寻找到根节点的编号,因为根节点不会出现在输入的子节点中,所以也很好找出来。
AC code:
#include <cstdio>#include <vector>#include <set>using namespace std; struct st{ int val; st*lc,*rc;}; void print(st*s){ printf(" %d",s->val); if(s->rc!=NULL) print(s->rc); if(s->lc!=NULL) print(s->lc);} int main(){ int n; while(scanf("%d",&n)!=EOF) { if(n==0) printf("NULL\n"); else { vector<st> vec; st ss; ss.val=-1; ss.lc=ss.rc=NULL; vec.push_back(ss); set<int> treeidx; for(int ii=0;ii<n;++ii) { int tt; scanf("%d",&tt); ss.val=tt; vec.push_back(ss); treeidx.insert(ii+1); } for(int i=1;i<=n;++i) { char c[2]; int l,r; scanf("%s",c); switch(c[0]){ case 'd': scanf("%d%d",&l,&r); treeidx.erase(l); treeidx.erase(r); vec[i].lc=&vec[l]; vec[i].rc=&vec[r]; break; case 'l': scanf("%d",&l); treeidx.erase(l); vec[i].lc=&vec[l]; break; case 'r': scanf("%d",&r); treeidx.erase(r); vec[i].rc=&vec[r]; break; case 'z': break; default: break; } } set<int>::iterator it=treeidx.begin(); printf("%d",vec[*it].val); if(vec[*it].rc!=NULL) print(vec[*it].rc); if(vec[*it].lc!=NULL) print(vec[*it].lc); printf("\n"); } } return 0;}/************************************************************** Problem: 1521 User: huo_yao Language: C++ Result: Accepted Time:0 ms Memory:1028 kb****************************************************************/题目链接:http://ac.jobdu.com/problem.php?pid=1521九度-剑指Offer习题全套答案下载:http://download.csdn.net/detail/huoyaotl123/8276299
0 0
- 【剑指Offer面试编程题】题目1521:二叉树的镜像--九度OJ
- 【剑指Offer面试编程题】 题目1350:二叉树的深度--九度OJ
- 【剑指Offer面试编程题】题目1385:重建二叉树--九度OJ
- 【剑指Offer面试编程题】题目1523:从上往下打印二叉树--九度OJ
- 【剑指Offer面试编程题】题目1367:二叉搜索树的后序遍历序列--九度OJ
- 【剑指Offer面试编程题】题目1368:二叉树中和为某一值的路径--九度OJ
- 九度OJ-题目1521:二叉树的镜像
- 【剑指Offer面试编程题】题目1520:树的子结构--九度OJ
- 【剑指Offer面试编程题】题目1503:二叉搜索树与双向链表--九度OJ
- 【剑指Offer面试编程题】题目1524:复杂链表的复制--九度OJ
- 【剑指Offer面试编程题】题目1386:旋转数组的最小数字--九度OJ
- 【剑指Offer面试编程题】题目1513:二进制中1的个数--九度OJ
- 【剑指Offer面试编程题】题目1514:数值的整数次方---九度OJ
- 【剑指Offer面试编程题】题目1519:合并两个排序的链表--九度OJ
- 【剑指Offer面试编程题】题目1522:包含min函数的栈--九度OJ
- 【剑指Offer面试编程题】题目1366:栈的压入、弹出序列--九度OJ
- 【剑指Offer面试编程题】题目1524:复杂链表的复制--九度OJ
- 【剑指Offer面试编程题】题目1369:字符串的排列--九度OJ
- Oracle OCP笔记(06)口令文件
- JMX使用
- Servlet基础—客户请求的处理:http请求报头
- 应用市场在线游戏信息统计
- POJ 1860 Currency Exchange(最短路SPFA)
- 【剑指Offer面试编程题】题目1521:二叉树的镜像--九度OJ
- Android菜鸟之路-多线程下载
- QQ邮箱批量登录器
- 黑马程序员 —— 键盘读入及转换流
- 【cocos2d-js官方文档】二十四、如何在android平台上使用js直接调用Java方法
- android 线程间同步问题
- 来自不同领域的问题与思考
- hdu3790最短路径问题(dijkstra)
- Spring 使用静态工厂方式实例化Bean