PAT 1102 Invert a Binary Tree[比较简单]
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
题目大意:给出一颗二叉树,节点数<=10,可以说很少了,将其左右反转,就是原来的左子树变为右子树,递归进行,并且输出反转后的层次遍历和中序遍历。
我的代码:应该是正确的,但是在层次遍历中因为使用了递归,所以不好控制最后的空格,所以全部测试点格式错误0分,也不能通过传参标记来控制吧。那么也就是说不能通过递归来进行了?
#include <iostream>
#include <map>
#include <cstdio>
#include <queue>
using namespace std;
struct Node{
int father;
int left,right;
Node(){
left=-;right=-;father=-;
}
}node[];
int root;
void inorder(int r){//但是这个怎么去控制最后一个不输出空格呢?哭唧唧啊。
if(node[r].left!=-)
inorder(node[r].left);
cout<<r<<" ";
if(node[r].right!=-)
inorder(node[r].right);
}
int main() {
int n;
cin>>n;
char ch1,ch2;
for(int i=;i<n;i++){
cin>>ch1>>ch2;
if(ch1!='-'){
node[i].right=ch1-'';
node[ch1-''].father=i;
}
if(ch2!='-'){
node[i].left=ch2-'';
node[ch2-''].father=i;
}
}
root=-;
for(int i=;i<n;i++){
if(node[i].father==-){
root=i;break;
}
}
//层次遍历的结果
queue<int> que;//现在完全不知道根是哪一个。
que.push(root);
while(!que.empty()){
int top=que.front();
que.pop();
cout<<top;
if(node[top].left!=-)que.push(node[top].left);
if(node[top].right!=-)que.push(node[top].right);
if(!que.empty())cout<<" ";
}
cout<<endl;
inorder(root); return ;
}
#include <iostream>
#include <map>
#include <cstdio>
#include <queue>
using namespace std;
struct Node{
int father;
int left,right;
Node(){
left=-;right=-;father=-;
}
}node[];
int root;
vector<int> in;
void inorder(int r){//但是这个怎么去控制最后一个不输出空格呢?哭唧唧啊。
if(node[r].left!=-)
inorder(node[r].left);
in.push_back(r);
if(node[r].right!=-)
inorder(node[r].right);
}
int main() {
int n;
cin>>n;
char ch1,ch2;
for(int i=;i<n;i++){
cin>>ch1>>ch2;
if(ch1!='-'){
node[i].right=ch1-'';
node[ch1-''].father=i;
}
if(ch2!='-'){
node[i].left=ch2-'';
node[ch2-''].father=i;
}
}
root=-;
for(int i=;i<n;i++){
if(node[i].father==-){
root=i;break;
}
}
//层次遍历的结果
queue<int> que;//现在完全不知道根是哪一个。
que.push(root);
while(!que.empty()){
int top=que.front();
que.pop();
cout<<top;
if(node[top].left!=-)que.push(node[top].left);
if(node[top].right!=-)que.push(node[top].right);
if(!que.empty())cout<<" ";
}
cout<<endl;
inorder(root);
for(int i=;i<in.size();i++){
cout<<in[i];
if(i!=in.size()-)cout<<" ";
}
return ;
}
//我应该是个智障吧,中序递归遍历直接存到一个向量里,最后在输出,不就好了?不直接在便利的时候输出啊!!。。学习了!
PAT 1102 Invert a Binary Tree[比较简单]的更多相关文章
- 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——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 (层序遍历+中序遍历)
本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90577042 1102 Invert a Binary Tree ...
- 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 ...
- 1102. Invert a Binary Tree (25)
The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote ( ...
- PAT A1102 Invert a Binary Tree (25 分)——静态树,层序遍历,先序遍历,后序遍历
The following is from Max Howell @twitter: Google: 90% of our engineers use the software 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 ...
随机推荐
- 新版SourceTree免帐号登录安装
http://blog.csdn.net/zcbyzcb/article/details/72959720?locationNum=2&fps=1 [ { "$id": & ...
- 工具类之数据库工具类:DBUtil(採用反射机制)
常常操作数据库的码农们一定知道操作数据库是一项非常复杂的工作.它不仅要解决各种乱码的问题还要解决各种数据表的增删改查等的操作. 另外每次操作数据库都要用到数据库连接.运行SQL语句.关闭连接的操作.所 ...
- THINKPHP include 标签动态加载文件
有时候需要在框架中动态的加载一些文件,文件名不确定,有控制器获取得到,想在模板中使用变量的形式进行加载,本以为这样写可以 结果不行 <include file="User/{$my_t ...
- C# string.Format("{0:C3}", 2)
- 基于麒麟座开发板2.0的MQTT实现例程
链接--->https://sanwen8.cn/p/649shZ1.html OneNET现已全面适配标准MQTT协议,相信这一功能的增加会**便于开发者进行设备的接入. OneNET提供了M ...
- Windows系统调用架构分析—也谈KiFastCallEntry函数地址的获取
为什么要写这篇文章 1. 因为最近在学习<软件调试>这本书,看到书中的某个调试历程中讲了Windows的系统调用的实现机制,其中讲到了从Ring3跳转到Ring0之后直接进入了K ...
- Angular基础---->AngularJS的使用(一)
AngularJS主要用于构建单页面的Web应用.它通过增加开发人员和常见Web应用开发任务之间的抽象级别,使构建交互式的现代Web应用变得更加简单.今天,我们就开始Angular环境的搭建和第一个实 ...
- html-withimg-loder
由于 webpack 对 html 的处理不太好,打包 HTML 文件中的图片资源是相对来说最麻烦的.这里需要引用一个插件—— html-withimg-loder // 打包 HTML 文件中的图片 ...
- SRC常见WEB漏洞系列之HTTP-HOST头攻击
一.背景: web程序需要知道网站的域名比较麻烦,需要使用HTTP的 host头字段: <?php _SERVER["HTTP_HOST"] ?> @app.route ...
- 使用log4net记录日志到数据库(含有自定义属性)
记录日志是管理系统中对用户行为的一种监控与审核,asp.net中记录日志的方式有很多种,这里我只介绍一下最近用到的log4net,关于他的具体介绍网上有很多,我讲一下他的用法. 第一步:在配置文件中的 ...