剑指Offer - 九度1521 - 二叉树的镜像
剑指Offer - 九度1521 - 二叉树的镜像
2013-11-30 23:32
- 题目描述:
-
输入一个二叉树,输出其镜像。

- 输入:
-
输入可能包含多个测试样例,输入以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
题意分析:
给定两棵二叉树,输出它的镜像,即左右节点正好相反,上图给的例子已经很清楚了。方法很明确,递归求解即可,对于每个节点,将左右节点交换,然后向下递归。每个点都会访问到一次,所以时间复杂度O(n)。空间复杂度O(1),只有交换过程中myswap使用了额外变量。
注意:根节点是哪一个,题目并没指定,所以要根据入度来判断哪个才是根,根节点入度为0。
// 652479 zhuli19901106 1521 Accepted 点击此处查看所有case的执行结果 1036KB 2022B 0MS
//
#include <cstdio>
using namespace std; const int MAXN = ;
int a[MAXN][];
int n;
int r;
bool first_node; void myswap(int &a, int &b)
{
a ^= b ^= a ^= b;
} void mirror(int a[][], int ra)
{
if(a == NULL){
return;
} if(ra < || ra > n - ){
return;
} if(a[ra][] != -){
mirror(a, a[ra][]);
}
if(a[ra][] != -){
mirror(a, a[ra][]);
}
myswap(a[ra][], a[ra][]);
} void preorder(const int a[][], int ra)
{
if(a == NULL){
return;
} if(ra < || ra > n - ){
return;
} if(first_node){
printf("%d", a[ra][]);
first_node = false;
}else{
printf(" %d", a[ra][]);
}
if(a[ra][] != -){
preorder(a, a[ra][]);
}
if(a[ra][] != -){
preorder(a, a[ra][]);
}
} int main()
{
int i;
char s[];
int x, y; while(scanf("%d", &n) == ){
if(n <= ){
printf("NULL\n");
continue;
}
for(i = ; i < n; ++i){
a[i][] = a[i][] = a[i][] = -;
a[i][] = ;
}
for(i = ; i < n; ++i){
scanf("%d", &a[i][]);
}
for(i = ; i < n; ++i){
scanf("%s", s);
if(s[] == 'd'){
scanf("%d%d", &x, &y);
a[i][] = x - ;
a[i][] = y - ;
++a[x - ][];
++a[y - ][];
}else if(s[] == 'l'){
scanf("%d", &x);
a[i][] = x - ;
++a[x - ][];
}else if(s[] == 'r'){
scanf("%d", &y);
a[i][] = y - ;
++a[y - ][];
}
}
r = -;
for(i = ; i < n; ++i){
if(a[i][] == ){
if(r == -){
r = i;
}else{
r = -;
break;
}
}
}
if(r < ){
// invalid tree structure
printf("NULL\n");
continue;
}
mirror(a, r);
first_node = true;
preorder(a, r);
printf("\n");
} return ;
}
剑指Offer - 九度1521 - 二叉树的镜像的更多相关文章
- 剑指Offer - 九度1368 - 二叉树中和为某一值的路径
剑指Offer - 九度1368 - 二叉树中和为某一值的路径2013-11-23 03:46 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结 ...
- 剑指Offer - 九度1350 - 二叉树的深度
剑指Offer - 九度1350 - 二叉树的深度2013-11-23 00:54 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的 ...
- 剑指Offer - 九度1523 - 从上往下打印二叉树
剑指Offer - 九度1523 - 从上往下打印二叉树2013-12-01 00:35 题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 输入: 输入可能包含多个测试样例,输入以E ...
- 剑指Offer - 九度1385 - 重建二叉树
剑指Offer - 九度1385 - 重建二叉树2013-11-23 23:53 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的 ...
- 剑指Offer - 九度1509 - 树中两个结点的最低公共祖先
剑指Offer - 九度1509 - 树中两个结点的最低公共祖先2014-02-07 01:04 题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样 ...
- 剑指Offer - 九度1520 - 树的子结构
剑指Offer - 九度1520 - 树的子结构2013-11-30 22:17 题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每 ...
- 剑指Offer - 九度1524 - 复杂链表的复制
剑指Offer - 九度1524 - 复杂链表的复制2014-02-07 01:30 题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点 ...
- 剑指Offer - 九度1508 - 把字符串转换成整数
剑指Offer - 九度1508 - 把字符串转换成整数2014-02-06 23:46 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例 ...
- 剑指Offer - 九度1504 - 把数组排成最小的数
剑指Offer - 九度1504 - 把数组排成最小的数2014-02-06 00:19 题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输 ...
随机推荐
- Microsoft EDP(enterprise database protection)选择应用程序在哪里可以访问企业数据
在配置策略时,对Rule template设置完成后,添加corporate identity.关于corporate identity, 目前没有什么好的理解,翻译过来就是“公司标识”,我也理解不了 ...
- 如何实现SQL Server临时表的创建?
以下的文章主要是对SQL Server临时表的创建的实际操作步骤,以及在实际操作中我们要用到的实际应用代码的介绍,我在一个信誉度很好的网站找到一个关于其相关内容今天拿出来供大家分享. 创建临时表 方法 ...
- VPS一键测试脚本 / 自带结果导出
脚本命令 一下脚本可能卡住,运行时间长,建议在screen中运行. 1.秋水逸冰大佬的Bench.sh脚本 特点:用时较短,对系统测试全面,英文:但缺少国内节点测速 有趣的是,bench.sh既是脚本 ...
- nginx缓存批量清除
研究了一段时间的缓存清除,说说了解的三种方式吧. 1. 原始的只增加缓存模块的,根据访问的路径一条条清除. 根据此方式要进行批量清除的话,必须在设定的缓存目录下通过自己写的程序来读取ng ...
- 调用外部EXE文件
实现效果: 知识运用: Process类的Start方法 实现代码: private void button1_Click(object sender, EventArgs e) { OpenFile ...
- node.js 练习1
1.利用editplus 创建 n1.js 文件 2.输入代码 3.打开cmd 输入 node n1.js 4.打开浏览器 输入 localhost:8000 5.再次回看 cmd
- B1954 The xor-longest Path
爆炸入口 给定一颗带权值的,节点数为n的树,求树上路径最大异或和. solution: 先dfs将所有点到根的异或和算出来.然后放进tire树中贪心. #include<cstdio> # ...
- 第1章-如何使用本书—零死角玩转STM32-F429系列
第1章 如何使用本书 1.1 本书的参考资料 集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com ...
- jQuery 二级联动
jQuery 二级联动 ----请选择省份---- 北京 上海 江苏 ----请选择城市---- 东城 西城 崇文 宣武 朝阳 黄浦 卢湾 徐汇 长宁 静安 南京 镇江 苏州 南通 扬州 & ...
- mask r-cnn
mask R-cnn, kaiming he的新作.可以同时完成object detection和segmentation,还可以做pose estimation,简直就是功能多多啊.在coco上测试 ...