题目描述:

输入一个二叉树,输出其镜像。

输入:

输入可能包含多个测试样例,输入以EOF结束。

对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000,n代表将要输入的二叉树节点的个数(节点从1开始编号)。接下来一行有n个数字,代表第i个二叉树节点的元素的值。接下来有n行,每行有一个字母Ci。

Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。

Ci=’l’表示第i个节点有一个左孩子,紧接着是左孩子的编号。

Ci=’r’表示第i个节点有一个右孩子,紧接着是右孩子的编号。

Ci=’z’表示第i个节点没有子孩子。

输出:

对应每个测试案例,

按照前序输出其孩子节点的元素值。

若为空输出NULL。

样例输入:

7
8 6 10 5 7 9 11
d 2 3
d 4 5
d 6 7
z
z
z
z

样例输出:

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

【剑指Offer面试编程题】题目1521:二叉树的镜像--九度OJ的更多相关文章

  1. 【剑指Offer面试编程题】题目1509:树中两个结点的最低公共祖先--九度OJ

    题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数 ...

  2. 【剑指Offer面试编程题】题目1508:把字符串转换成整数--九度OJ

    题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n&l ...

  3. 【剑指Offer面试编程题】题目1507:不用加减乘除做加法--九度OJ

    题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为两个整数m和n(1<=m,n<=10 ...

  4. 【剑指Offer面试编程题】题目1506:求1+2+3+...+n--九度OJ

    题目描述: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 输入: 输入可能包含多个测试样例. 对于每个 ...

  5. 【剑指Offer面试编程题】题目1356:孩子们的游戏(圆圈中最后剩下的数)--九度OJ

    题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为JOBDU的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈. ...

  6. 【剑指Offer面试编程题】题目1355:扑克牌顺子--九度OJ

    题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他 ...

  7. 【剑指Offer面试编程题】题目1360:乐透之猜数游戏--九度OJ

    题目描述: 六一儿童节到了,YZ买了很多丰厚的礼品,准备奖励给JOBDU里辛劳的员工.为了增添一点趣味性,他还准备了一些不同类型的骰子,打算以掷骰子猜数字的方式发放奖品.例如,有的骰子有6个点数(点数 ...

  8. 【剑指Offer面试编程题】题目1362:左旋转字符串--九度OJ

    题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=&qu ...

  9. 【剑指Offer面试编程题】题目1361:翻转单词顺序--九度OJ

    题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,&quo ...

随机推荐

  1. LVS、Tomcat、Nginx、PHP优化项

    一.LVS 性能调优的方法最佳实践1.最小化安装编译系统内核2.优化持久服务超时时间:    1)显示超时时间    #ipvsadm -Ln --timeout    #Timeout (tcp t ...

  2. C语言:将字符串中的前导*号全部移到字符串的尾部。

    //规定输入的字符串中只包含字母和*号,fun函数:将字符串中的前导*号全部移到字符串的尾部. #include <stdio.h> void fun( char *a ) { ]; ch ...

  3. workspace 打开的是我的电脑

    在system tree板块的空白处右键-->set root-->current workspace 即可恢复workspace.

  4. 爬虫,工具 - Splash

    What is it? Splash is a javascript rendering service. It's a lightweight web browser with an HTTP AP ...

  5. 4_3 救济金发放(UVa133)<子过程/函数设计>

    为了缩短领救济品的队伍,NNGLRP决定了以下策略:每天所有来申请救济品的人会被放在一个大圆圈,面朝里面.标明一个人为编号1号,其他的就从那个人开始逆时针开始编号直到N.一个官员一开始逆时针数,数k个 ...

  6. js中的跨域

    因为javascript的同源策略,导致它普通情况下不能跨域,直到现在,我还是不能完全理解js跨域的几种方法,没办法,只能慢慢学习,慢慢积累,这不,几天又在园里看到一篇博文,有所收获,贴上来看看; 原 ...

  7. Cocos纹理理解

    原文:https://blog.csdn.net/u010223072/article/details/78287294 理论要点 要点一: 文件格式与像素格式的区别:文件格式是图像为了存储信息而使用 ...

  8. 计划任务cron,date,时间同步ntp,chrony

    取出磁盘利用率最大值 ,写个脚本,做判断,只要快满了,就报警 计划周期性执行的任务提交给crond,到指定时间会自动运行 系统cron任务:系统维护作业  /etc/crontab 用户cron任务: ...

  9. ASA-有关AAA用户登录的问题

    问题示例:I have created a test user that is set to privilege 15 in the config: When I log in to the ASA ...

  10. 201771010131-王之泰 实验一 软件工程准备—<通读《现代软件工程—构建之法》后所思所想>周学习总结

    项目 内容 作业所属课程 https://www.cnblogs.com/nwnu-daizh/ 作业要求 https://www.cnblogs.com/nwnu-daizh/p/12369881. ...