1. 题目的输入是,先给出结点总数N,然后N行给出的是值为x(0<=x<=N-1)的结点的左右结点的值,若不存在左/右结点,则值为 

2. 这一题我用动态链表没有做出来,根据参考书提示改用静态链表。整体思路是,将结点的值作为静态链表(也就是数组)node的下标,结点的左右结点都设为整型,将读入的字符转化为整型,如若不存在则设为-1。设置一个布尔型的哈希,把出现过的下标记录为true。全部读完后要是有一个值从来没出现过,也就是它不是任何结点的子结点,如此找到根节点。根节点作为参数传入到后序翻转二叉树函数invertTree(int root),层次遍历输出函数levelOrder(int root),中序遍历输出函数inOrder(int root)。

3. 参考书上说如果翻转二叉树(即把每一个结点的左右子树互换),得用后序遍历,这个我还没明白为什么

4. 以下是一些小技巧

(1)在输入的时候可以用scanf("%*c%c",&c)来取代getchar()+scanf("%c",&c)

(2)输出时,由于最后一个数字后面不可以有空格,那么每输出一个就对总数进行减一,然后判断是否大于1(也就是看后面是否还有没输出的),若是则输出一个空格。但是这里有两轮输出,总数一开始需要拷贝一个副本n0,留着第二轮输出用。

(3)不管是先序、层序还是后序,框架一样,实现细节却和动态数组时不同了,特别是特判的时候不再是地址是否等于NULL,而是值是否等于-1。

AC代码

#include<cstdio>
#include<map>
#include<set>
#include<string>
#include<cstring>
#include<iostream>
#include<vector>
#include<stack>
#include<queue>
#include<algorithm>using namespace std;const int maxn = 11;bool appear[maxn] = {false};int n,n0; struct Node{int left,right;
}node[maxn];int charToInt(char c){if(c!='-'){appear[c-'0'] = true;return c-'0';}else return -1;
}int findRoot(){for(int i=0;i<n;i++){if(!appear[i])return i;}
}void invertTree(int root){if(root==-1)return;invertTree(node[root].left);invertTree(node[root].right);swap(node[root].left,node[root].right);
}void levelOrder(int root){queue<int> que;que.push(root);while(!que.empty()){int top = que.front();printf("%d",top);que.pop();if(--n)printf(" ");if(node[top].left!=-1)que.push(node[top].left);if(node[top].right!=-1)que.push(node[top].right);}
}void inOrder(int root){if(root==-1)return;inOrder(node[root].left);printf("%d",root);if(--n0)printf(" ");inOrder(node[root].right);
} int main(){scanf("%d",&n);n0 = n;//用于中序遍历计数 char left,right;for(int i=0;i<n;i++){scanf("%*c%c %c",&left,&right);node[i].left = charToInt(left);node[i].right = charToInt(right);}int root = findRoot();invertTree(root);    levelOrder(root);printf("\n");inOrder(root);printf("\n");return 0;
}

1102 Invert a Binary Tree 需再做相关推荐

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

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

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

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

  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

    题目来源:PAT (Advanced Level) Practice The following is from Max Howell @twitter: Google: 90% of our eng ...

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

  6. 1102 Invert a Binary Tree (25 分)

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

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

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

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

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

  9. 1066 Root of AVL Tree 需再做

    1. 这题如果不知道平衡二叉树怎么平衡的(左旋右旋那一套)应该不可能做出吧,那就输出中位数回点血了. 2. 需要具备的基础知识:怎么将结点插入平衡二叉树. 3. 我犯的一个错误:把更新高度的函数直接返 ...

最新文章

  1. 2020滑铁卢大学计算机科学学费,加拿大大学国际生学费上涨 滑铁卢大学学费上涨62%...
  2. php 接口的定义与实现,PHP接口定义与用法示例
  3. java 常见数据类型
  4. 数据结构学习之栈求解n皇后问题
  5. 模型部署到移动端_谷歌开源 MobileNetV3:新思路 AutoML 改进计算机视觉模型移动端...
  6. 栈在前端中的应用,顺便再了解下深拷贝和浅拷贝!
  7. MySQL 创建索引
  8. 远程连接:hive 报错:Permission denied: user=anonymous, access=EXECUTE
  9. Python的turtle库还能绘制这些有趣图形?
  10. OpenCV 图像金字塔buildPyramid、pyrDown、pyrUp
  11. 2017/4/27 morning
  12. 编程实现库函数strcat
  13. postman测试上传文件(上传图片)
  14. tkinter点击按钮实现图片的切换
  15. 使用HiPrint批量打印条码,二维码
  16. 工厂自动化的生产线属于计算机应用,计算机试题
  17. 1.4 裸机实验GPIO与LED DNW驱动无法安装问题解决
  18. L3-020 至多删三个字符 (30分)(动态规划)
  19. canvas塔防小游戏-保卫大司马
  20. MES系统设备管理概述(中)

热门文章

  1. php解决 mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysq
  2. iOS 仿微信灵活添加标签
  3. 程序员取悦女票的正确姿势---Tip1(iOS美容篇)
  4. 优化实战:不要随便将字段折腾来折腾去的
  5. weblogic域,管理服务器,受管服务器,集群和机器的基本知识
  6. Android学习路线
  7. Oracle Study之--ORA-12537(TNS:connection closed) 错误案例
  8. 迁移碰到数据库 Unknown collation: 'utf8mb4_unicode_ci'
  9. ORM武器:NHibernate(三)五个步骤+简单对象CRUD+HQL
  10. C++编程思想重点笔记(上)