1102 Invert a Binary Tree
题目来源:PAT (Advanced Level) Practice
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
words:
Invert 使反转,前后倒置 whiteboard 白板 adjacent 邻近的
题意:
将给定的一颗二叉树进行反转,即左右子树互换,然后输出层序遍历序列和中序遍历序列;
思路:
1. 本题的输入使以左子树 右子树的形式,所以在输入时我们按照右子树 左子树的形式输入,即可实现反转效果;
2. 用一个二维数组a[][2]来保存二叉树,行下标代表根结点,每行的两个元素分别代表右子树和左子树;
3. 用一个一维数组vis[]来保存一个结点是否为其他结点的孩子结点,下标代表结点;
4. 在vis[]中找出不是任何结点的孩子结点的结点,即根结点;
6. 从根结点开始进行层序遍历;
7. 从根结点开始进行中序遍历;
//PAT ad 1102 Invert a Binary Tree
#include <iostream>
using namespace std;
#define N 10
#include <queue>char a[N][2];
bool vis[N]={false};string ans_InOrder; //前序遍历结果
string ans_level; //层序遍历结果 void InOrder(int i) //前序遍历
{if(a[i][0]!='-'&&a[i][1]!='-') //左右子树均非空 {InOrder(a[i][1]-'0'); //递归遍历左子树 ans_InOrder+=to_string(i)+" "; //输出当前根结点 InOrder(a[i][0]-'0'); //递归遍历右子树 }else if(a[i][1]!='-') //左子树非空 {InOrder(a[i][1]-'0');ans_InOrder+=to_string(i)+" ";}else if(a[i][0]!='-') //右子树非空 {ans_InOrder+=to_string(i)+" ";InOrder(a[i][0]-'0'); }elseans_InOrder+=to_string(i)+" "; //左右子都为空
}void Level(int i) //层序遍历
{queue<int> que;que.push(i); //压入根结点 while(!que.empty()){int x=que.front();que.pop();ans_level+=to_string(x)+" ";if(a[x][1]!='-') //判断左子树 que.push(a[x][1]-'0');if(a[x][0]!='-') //判断右子树 que.push(a[x][0]-'0');}
} int main()
{int n,i;cin>>n;char r,l;for(i=0;i<n;i++){cin>>r>>l; //右子树、左子树 a[i][0]=r;a[i][1]=l;if(r>='0'&&r<='9')vis[r-'0']=true; //标记是否为某个树的子节点 if(l>='0'&&l<='9')vis[l-'0']=true;}for(i=0;i<n;i++) //寻找根结点 if(vis[i]==false)break;Level(i); //层序遍历 InOrder(i); //前序遍历 ans_level.pop_back(); //舍弃末尾空格 ans_InOrder.pop_back(); cout<<ans_level<<endl; //输出 cout<<ans_InOrder<<endl; return 0;}
1102 Invert a Binary Tree相关推荐
- 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:[C++题解]反转二叉树、递归
文章目录 题目分析 题目链接 题目分析 反转二叉树这道题目特别出名!!!,是因为Homebrew这款Mac上大火的软件的作者到google面试,就考了这道题.面试官说了下面这段话:你竟然连在白板上翻转 ...
- 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 (25point(s))
1102 Invert a Binary Tree (25point(s)) The following is from Max Howell @twitter: Google: 90% of our ...
- 1102 Invert a Binary Tree (25 分)
1102 Invert a Binary Tree (25 分) The following is from Max Howell @twitter: Google: 90% of our engin ...
- PAT甲级-二叉树的遍历-1102 Invert a Binary Tree解题思路
1102 Invert a Binary Tree (25 分) 思路 翻转二叉树 后序遍历翻转即可,由于给出每个结点的左右儿子,所以这里用到二叉树的静态写法更加方便 这里有个坑,bool数组初始化为 ...
- 1102. Invert a Binary Tree (25)-PAT甲级真题
The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote ( ...
- 1102 Invert a Binary Tree 需再做
1. 题目的输入是,先给出结点总数N,然后N行给出的是值为x(0<=x<=N-1)的结点的左右结点的值,若不存在左/右结点,则值为 - . 2. 这一题我用动态链表没有做出来,根据参考书提 ...
- PAT甲级Invert a Binary Tree 柳神层序遍历的思路值得借鉴
1102 Invert a Binary Tree (25分) The following is from Max Howell @twitter: Google: 90% of our engine ...
最新文章
- 如何自学php框架,如何学习php框架
- JVM 性能调优之定位问题
- mysql 命令行小结
- 用户重要数据转移方法〖罗斌个人工作经验谈〗
- php 24点算法,PHP实现简单的24点游戏
- layui select下拉框改变之 change 监听事件
- spark读取文件源码分析-2
- 图论为什么这么难_图论是什么,为什么要关心?
- Highcharts 配置选项详细说明
- 音频光端机的几个重要指标
- 康力电梯开门不关门 服务器显示开门键动作,康力电梯现场调试后常见问题及排除...
- C#正则表达式 — 正则表达式类
- 79ECharts:基础知识与问题解决
- Docker 安装常用软件记录
- Centos开机自动执行shell脚本启动tomcat服务器
- Simulink汽车动力学仿真
- 网络数据采集技术snmp/netflow/sflow/network telemetry简介
- 【转载】CC控制服务的设计和侦测方法综述
- 微信聊天记录删除了怎么恢复?通过这几种方法可以找回
- 【T+】删除/取消畅捷通T+软件登录账套后的“查看认证”按钮