题目来源: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相关推荐

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

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

  2. PAT甲级1102 Invert a Binary Tree:[C++题解]反转二叉树、递归

    文章目录 题目分析 题目链接 题目分析 反转二叉树这道题目特别出名!!!,是因为Homebrew这款Mac上大火的软件的作者到google面试,就考了这道题.面试官说了下面这段话:你竟然连在白板上翻转 ...

  3. 1102 Invert a Binary Tree(甲级)

    1102 Invert a Binary Tree (25分) The following is from Max Howell @twitter: Google: 90% of our engine ...

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

  5. 1102 Invert a Binary Tree (25 分)

    1102 Invert a Binary Tree (25 分) The following is from Max Howell @twitter: Google: 90% of our engin ...

  6. PAT甲级-二叉树的遍历-1102 Invert a Binary Tree解题思路

    1102 Invert a Binary Tree (25 分) 思路 翻转二叉树 后序遍历翻转即可,由于给出每个结点的左右儿子,所以这里用到二叉树的静态写法更加方便 这里有个坑,bool数组初始化为 ...

  7. 1102. Invert a Binary Tree (25)-PAT甲级真题

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

  8. 1102 Invert a Binary Tree 需再做

    1. 题目的输入是,先给出结点总数N,然后N行给出的是值为x(0<=x<=N-1)的结点的左右结点的值,若不存在左/右结点,则值为 - . 2. 这一题我用动态链表没有做出来,根据参考书提 ...

  9. PAT甲级Invert a Binary Tree 柳神层序遍历的思路值得借鉴

    1102 Invert a Binary Tree (25分) The following is from Max Howell @twitter: Google: 90% of our engine ...

最新文章

  1. 如何自学php框架,如何学习php框架
  2. JVM 性能调优之定位问题
  3. mysql 命令行小结
  4. 用户重要数据转移方法〖罗斌个人工作经验谈〗
  5. php 24点算法,PHP实现简单的24点游戏
  6. layui select下拉框改变之 change 监听事件
  7. spark读取文件源码分析-2
  8. 图论为什么这么难_图论是什么,为什么要关心?
  9. Highcharts 配置选项详细说明
  10. 音频光端机的几个重要指标
  11. 康力电梯开门不关门 服务器显示开门键动作,康力电梯现场调试后常见问题及排除...
  12. C#正则表达式 — 正则表达式类
  13. 79ECharts:基础知识与问题解决
  14. Docker 安装常用软件记录
  15. Centos开机自动执行shell脚本启动tomcat服务器
  16. Simulink汽车动力学仿真
  17. 网络数据采集技术snmp/netflow/sflow/network telemetry简介
  18. 【转载】CC控制服务的设计和侦测方法综述
  19. 微信聊天记录删除了怎么恢复?通过这几种方法可以找回
  20. 【T+】删除/取消畅捷通T+软件登录账套后的“查看认证”按钮

热门文章

  1. 正则表达式学习(三)转义和反义
  2. 理解矩阵,与矩阵背后的现实意义
  3. 【Windows】批处理 (cmd/bat) 常用命令小结
  4. NOIP2017Day1T1-小凯的疑惑
  5. LaTeX系列 |3、常用LaTeX表格模版
  6. 干货!考虑部署在移动端的视频插帧模型:CDFI
  7. 想做菜,要买菜、切菜?NO,这个网站可以让你现在就掌勺
  8. 微信小程序直播消耗服务器流量,微信小程序直播私域流量过程要用多久
  9. 深读源码-java集合类总结篇
  10. 轻松获取布局截图 或友盟分享截图