1102. Invert a Binary Tree (25)
The following is from Max Howell @twitter:
Google: 90% of our engineers use the software you wrote (Homebrew), but you can't invert a binary tree on a whiteboard so fuck off.
Now it's your turn to prove that YOU CAN invert a binary tree!
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (<=10) which is the total number of nodes in the tree -- and hence the nodes are numbered from 0 to N-1. Then N lines follow, each corresponds to a node from 0 to N-1, and gives the indices of the left and right children of the node. If the child does not exist, a "-" will be put at the position. Any pair of children are separated by a space.
Output Specification:
For each test case, print in the first line the level-order, and then in the second line the in-order traversal sequences of the inverted tree. There must be exactly one space between any adjacent numbers, and no extra space at the end of the line.
Sample Input:
8
1 -
- -
0 -
2 7
- -
- -
5 -
4 6
Sample Output:
3 7 2 6 4 0 5 1
6 5 7 4 3 2 0 1
#include<stdio.h>
#include<string>
#include<iostream>
#include<string.h>
#include<sstream>
#include<vector>
#include<map>
#include<stdlib.h>
#include<queue>
using namespace std; struct node
{
node():l(-),r(-){}
int l,r,id;
}; node Tree[];
bool notroot[];
bool fir = ;
void inoder(int root)
{
if(Tree[root].l != -)
{
inoder(Tree[root].l);
}
if(fir)
{
fir = ;
printf("%d",root);
}
else printf(" %d",root);
if(Tree[root].r != -)
{
inoder(Tree[root].r);
}
}
int main()
{
int n,tem;
char l[],r[];
scanf("%d",&n);
for(int i = ;i <n;++i)
{
Tree[i].id = i;
}
for(int i = ;i <n;++i)
{
scanf("%s%s",r,l);
if(l[] != '-')
{
tem = atoi(l);
Tree[i].l = tem;
notroot[tem] = ;
}
if(r[] != '-')
{
tem = atoi(r);
Tree[i].r = atoi(r);
notroot[tem] = ;
}
}
int root;
for(int i = ;i <n;++i)
{
if(!notroot[i])
{
root = i;
break;
}
}
queue<node> qq;
qq.push(Tree[root]);
bool fir2 = ;
while(!qq.empty())
{
node ntem = qq.front();
qq.pop();
if(fir2)
{
fir2 = ;
printf("%d",ntem.id);
}
else printf(" %d",ntem.id);
if(ntem.l != -)
{
qq.push(Tree[ntem.l]);
}
if(ntem.r != -)
{
qq.push(Tree[ntem.r]);
}
}
printf("\n");
inoder(root);
printf("\n");
return ;
}
1102. Invert a Binary Tree (25)的更多相关文章
- PAT Advanced 1102 Invert a Binary Tree (25) [树的遍历]
题目 The following is from Max Howell @twitter: Google: 90% of our engineers use the sofware you wrote ...
- PAT (Advanced Level) 1102. Invert a Binary Tree (25)
简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...
- PAT甲题题解-1102. Invert a Binary Tree (25)-(建树,水题)
就是把输入给的左孩子右孩子互换一下,然后输出层次遍历和中序遍历. #include <iostream> #include <algorithm> #include <c ...
- 【PAT甲级】1102 Invert a Binary Tree (25 分)(层次遍历和中序遍历)
题意: 输入一个正整数N(<=10),接着输入0~N-1每个结点的左右儿子结点,输出这颗二叉树的反转的层次遍历和中序遍历. AAAAAccepted code: #define HAVE_STR ...
- PAT甲级——1102 Invert a Binary Tree (层序遍历+中序遍历)
本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90577042 1102 Invert a Binary Tree ...
- PAT 1102 Invert a Binary Tree[比较简单]
1102 Invert a Binary Tree(25 分) The following is from Max Howell @twitter: Google: 90% of our engine ...
- 1102 Invert a Binary Tree——PAT甲级真题
1102 Invert a Binary Tree The following is from Max Howell @twitter: Google: 90% of our engineers us ...
- PAT 1102 Invert a Binary Tree
The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote ( ...
- 1102 Invert a Binary Tree (25 分)(二叉树遍历)
二叉树有N个结点,给出每个结点的左右孩子结点的编号,把二叉树反转(左右孩子交换 所以是后序遍历交换) 输出反转后二叉树的层序遍历和中序遍历 #include<bits/stdc++.h> ...
随机推荐
- 新手不了解Xcode和mac系统可能犯得错误和我的建议
我是学iOS刚入门的新手,本人装的时黑苹果,我是喜欢完美的人,但黑苹果又是不完美的系统,比如关不了机啊,和显卡驱动不了啊,当自己的电脑出现白屏和卡顿的时候气的没脾气.我是一个新手.开始学的时java但 ...
- mina 字节数组编解码器的写法 II
I 里面的写法不够严谨,这也是我之前说它简陋的主要原因,下面来个更加严谨.完整一点儿的: ByteArrayEncoder.java package org.bruce.mina.cpp.codec; ...
- java 的文件读取操作
/** * @param filePath 文件的全路径 * 返回我们读取到的文件内容 * **/ public static String readFile(String filePath) { F ...
- poj 3417 树形dp+LCA
思路:我以前一直喜欢用根号n分段的LCA.在这题上挂了,第一次发现这样的LCA被卡.果断改用Tarjan离线算法求LCA. 当前节点为u,其子节点为v.那么: 当以v根的子树中含有连接子树以外点的边数 ...
- 【.NET基础】--委托、事件、线程(1)
1,委托 是存放方法的指针的清单,也就是装方法的容器 A, 新建winform项目[01委托],项目中添加dg_SayHi.cs 委托类 用于存储方法 namespace _01委托 { //定义委托 ...
- Sublime text3 笔记
打算换个编辑器,以前用dw,在到Aptana,都是比较大的编辑器了,打开的时候都有些慢,久闻sublime text3,小巧轻便,插件丰富,所以决定换下 官网下载地址(ps 之前下载了各种的破解版,总 ...
- JSCharts
JsCharts是一款轻量级的,基于js的图形报表工具,提供了线形图,柱状图,饼图,使用简单,相对其他的图表如FusionCharts来讲功能可能不是特别强大,但是对于一些要求不高的应用来讲已经够用了 ...
- char*,const char*和string 三者转换
1. const char* 和string 转换 (1) const char*转换为 string,直接赋值即可. EX: const char* tmp = "tsinghua&quo ...
- ios卡牌游戏项目源码
上传者fu_sion,源码CardGame,一副牌从中抽取十二张牌,翻开牌可以相同的花色+1 相同的数字+4分 同一张牌翻开后可以盖上(算是一个BUG)就酱紫~~ 项目源码下载:http://code ...
- 四步完成ajax的使用
什么是ajax? ajax(异步javascript xml) 能够刷新局部网页数据而不是重新加载整个网页. 如何使用ajax? 第一步,创建xmlhttprequest对象,var xmlhttp ...