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[比较简单]的更多相关文章

  1. PAT 1102 Invert a Binary Tree

    The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote ( ...

  2. 1102 Invert a Binary Tree——PAT甲级真题

    1102 Invert a Binary Tree The following is from Max Howell @twitter: Google: 90% of our engineers us ...

  3. PAT甲级——1102 Invert a Binary Tree (层序遍历+中序遍历)

    本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90577042 1102 Invert a Binary Tree ...

  4. 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 ...

  5. 1102. Invert a Binary Tree (25)

    The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote ( ...

  6. PAT A1102 Invert a Binary Tree (25 分)——静态树,层序遍历,先序遍历,后序遍历

    The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote ( ...

  7. PAT (Advanced Level) 1102. Invert a Binary Tree (25)

    简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...

  8. PAT甲题题解-1102. Invert a Binary Tree (25)-(建树,水题)

    就是把输入给的左孩子右孩子互换一下,然后输出层次遍历和中序遍历. #include <iostream> #include <algorithm> #include <c ...

  9. 【PAT甲级】1102 Invert a Binary Tree (25 分)(层次遍历和中序遍历)

    题意: 输入一个正整数N(<=10),接着输入0~N-1每个结点的左右儿子结点,输出这颗二叉树的反转的层次遍历和中序遍历. AAAAAccepted code: #define HAVE_STR ...

随机推荐

  1. 放在github pages上的静态网站怎么取消绑定自定义域名?

    使用GitHub Pages搭建的静态网站绑定了自定义域名操作,但是想反悔怎么办? 删除CNAME文件,重新删除仓库,新建后均不行~ 解决办法:清除一下浏览器缓存,或者用别的浏览器打开就好了,因为之前 ...

  2. RabbitMQ消息确认(发送确认,接收确认)

    前面几篇记录了收发消息的demo,今天记录下关于 消息确认方面的 问题. 下面是几个问题: 1.为什么要进行消息确认? 2.rabbitmq消息确认 机制是什么样的? 3.发送方如何确认消息发送成功? ...

  3. MAC快捷键使用大全

    当写到标题的时候.突然想起刚接触电脑的时候总是会有一些window希统快捷键大全.foxmail快捷键使用大全,最没想到的是,作为一个说不上资深.也是有了年头的程序猿,到现在.我还要在写一个快捷键使用 ...

  4. 超全面的JavaWeb笔记day02<CSS&JavaScript>

    1.CSS的简介 2.CSS概述和与HTML的结合方式(四种)(*******) 3.CSS的基本选择器(******) 4.CSS的扩展选择器(了解) 5.CSS的盒子模型(了解) 6.CSS的布局 ...

  5. 有人问thinkphp的标签解析的时候为什么出现标签内内容空格丢失

    举例如下 该代码被解析后 变为 并不是  active li bg  这里面的空格没有了 我试了多次,确实是这样,后来想了想 应该是框架解析的时候自动处理了,然后找了找框架代码 Template.cl ...

  6. MongoDB(一)-- 简介、安装、CRUD

    一.Mongodb简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供可 ...

  7. Dotnet listview

    属性-----------------------------------------------------------------------------------------  .Access ...

  8. MySQL主从复制与读写分离[修改]

    作者:lixiuran 日期:2014年5月2日   备注[本人根据网上资源修改,参考http://www.cnblogs.com/luckcs/articles/2543607.html] 测试环境 ...

  9. webstrom如何配置babel来转换es6

    网上有很多关于如何设置babel的.我学习着设置,但总差那么几步,没能满足我的需求. 我使用的是webStorm2017.1版本. babel安装准备 使用webStorm自带的filewatcher ...

  10. SDWebImage使用,图片加载和缓存

    本文转载至 http://blog.163.com/wzi_xiang/blog/static/659829612012111402812726/     清除缓存: [[SDImageCache s ...