1102 Invert a Binary Tree 需再做
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;
}
相关文章:

iOS安全攻防(八)Thoes的Logos简介
个人原创,转帖请注明来源:cnblogs.com/jailbreaker 上一篇帖子,讲到使用iOSOpenDev开发基于Theos的Tweak,功能Hook了SpringBoard的 -(void)applicationDidFinishLaunching:(id)application。 先简单讲一下Hook,Hook中文翻译为“钩子”,非常形…
Algs4-1.1.13编写一段代码,打印出一个M行N列的二维数组的转置(交换行和列)
1.1.13编写一段代码,打印出一个M行N列的二维数组的转置(交换行和列)。public class Test{public static void main(String[] args){//初始化int MInteger.parseInt(args[0]);int NInteger.parseInt(args[1]);String[][] arraynew String[M][N];for (int…

1053 Path of Equal Weight
1. 以下两组关系很大的概念 树的深度优先搜索 - 先根遍历 - 递归 树的广度优先搜索 - 层序遍历 - 非递归 本题考察的是前者,我设置了这样一个结构体 struct Prestruct{int totalWei 0;vector<int> pre; };Prestruct pre[maxn]; pre[idx].pre向量存放父节…

MapXtreme 2005 学习心得 在地图上创建点/线并显示标注(五)
新建示例 1:新建项目 新建一个网站,选择MapXtreme 6.7.1 Web Application在App_Code中,我们新建一个类,起名叫:LayerManager.cs2:把上节函数放到类LayerManager中 把上一节的函数代码全copy过来,还有using的…

无人驾驶——对frenet坐标的理解
好的确定车和路之间的关系,我们通常将车辆的在大地坐标坐标转化为车辆和道路之间的frenet坐标。 可能有人会疑问为什么转换后就方便了呢?我们来看一个例子。 在大地坐标下: 无人车首先要知道红色车的位置。通过传感器得到目标在车辆坐标系下的…

1079 Total Sales of Supply Chain
1. 这道题考察的是树的层次遍历,结点需要有层这个属性,对于我来说,难点在于什么时候给层赋值,看书后知道应该是在加入队列之前(不管是根节点还是之后所有节点)。 2. 一开始算得216,原因是把r直接加一当作底数…

在VS下用C语言连接SQLServer2008
在VS下用C语言连接SQLServer2008 原文:在VS下用C语言连接SQLServer2008 step1:启动SQLSERVER服务 step2:打建立数据库test,在test库中建立test表(a varchar(200),b varchar(200)) step3:建立系统DSN,开始菜单 ->运行 ->odbcad32, 添加->SQL SERVER Native Client 1…
canvas.width和canvas.style.width区别以及应用
今天讲的内容是canvas.width和canvas.style.width的区别,在没有做canvas项目之前,其实我是并没有深入了解过这两个属性的,最近在研究canvas项目的自适应问题,尤其是在canvas中置入图片,碰到了图片模糊的问题࿰…

vj p1042捕风捉影 题解
原体叙述 题意就是让你找出m,n之间的既是回文数又是素数的数 此题完全可以打表。除打表外,方法如下: 构成法 根据数学知识可知,如果一个回文数为偶数位,则必然能被11整除。 即所找的结果必为奇数位。 这样,大致方法就出…

1090 Highest Price in Supply Chain 需再做
1. 由于用不上结点的数据域,所以可以只用整型向量数组存放每一个结点的子节点下标即可。 2. 涉及到层次,未必用层次遍历,本题用先根遍历,也就是深度优先代码更优雅。 3. 这题创建树未必难,但是题目有一句话必须读懂e…

有关Adobe公司的PostScript语言授权问题
各位大神好: 最近公司打算用PostScript语言开发一款打印机产品,本人现在正对这方面予以了解,但是关于Postscript却一无所知,请问园子里的大神们有没有知道的。 我是想咨询一下有关adobe公司在上世纪80年代公司刚成立的时候所推出的…

INTERSECT/EXCEPT VS. IN/NOT IN
我真是OLD到死,虽然记得以前肯定看到过INTERSECT/EXCEPT这两个关键字,前不久还在羡慕Oracle有/-集合操作符而SQL Server怎么竟然没有。。。现在想想难怪当初微软面试的时候面试官告诉我最好了解一下SQL Server 2005新的函数。。。 下面翻译一下http://ww…

聊聊storm的stream的分流与合并
序 本文主要研究一下storm的stream的分流与合并 实例 Testpublic void testStreamSplitJoin() throws InvalidTopologyException, AuthorizationException, AlreadyAliveException {TopologyBuilder builder new TopologyBuilder();builder.setSpout("sentence-spout&quo…

1106 Lowest Price in Supply Chain
1. 本题和1090 Highest Price in Supply Chain适成对比,都是先构建一棵树,但本题是求最小层数和个数,链接题是求最大层数和个数。在极值更换和个数更新方面,两道题是一样的,但要注意,如果是求最小ÿ…

积极拥抱.NET Core开源社区
潘正磊在上海的Tech Summit 2018 大会上给我们的.NET Core以及开源情况带来了最新信息。 .Net Core 开源后取得了更加快速的发展,目前越活跃用户高达400万人,每月新增开发者45万,在 GitHub 上的月度增长达到15%。目前有来自超过3,700家企业的…

13_文件的操作模式
私有文件访问测试 package cn.itcast.test;import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream;import android.test.AndroidTestCase; import android.util.Log;public class AccessOtherAppPrivateTest extends AndroidTestCase {p…

Vcastr 2.2 flv 网络播放器 参数设置
Vcastr 2.2 flv 网络播放器 参数设置 参数名称参数说明默认值vcastr_file方法2传递影片flv文件地址参数,多个使用|分开空vcastr_title影片标题参数,多个使用|分开,与方法2配合使用空vcastr_xml方法3 传递影片flv文件地址参数,样板…

1094 The Largest Generation
1. 开始测试点1答案错误,上网查了发现是因为用了层次遍历的原因,改成先根遍历,即DFS答案就正确了。启示:BFS不行就试试DFS。 2. 这题也不需要结构体数组,向量数据即可,有几个较为关键的变量 int numOflay…

JS魔法堂:mmDeferred源码剖析
一、前言 avalon.js的影响力愈发强劲,而作为子模块之一的mmDeferred必然成为异步调用模式学习之旅的又一站呢!本文将记录我对mmDeferred的认识,若有纰漏请各位指正,谢谢…

asp vb 插入,更新,删除数据库操作。
记笔记。离开学校,东西都还给老师了,哎。Select Case str Case "insert": sql"select * from ["&tablename&"] where idnull" rs.open sql,conn,1,3 rs.addnew For Each key In request.Form …

第五次作业:四则运算之升级
本次作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2232 我的github地址:https://github.com/yellowjy/study 结对同伴的学号姓名:201606120069 缪国锋 一、基本要求: 生成题目,单个题目最多…

妙用vector:根据第一个不等的元素比较两个序列大小的利器
如下面的代码,可以看到向量容器va和vb的第六个元素是第一个不等的元素,且va[5]>vb[5],因此输出va>vb时结果应该为1。 int main(){vector<int> va,vb;int a[10] {0,1,2,3,4,6};int b[10] {0,1,2,3,4,5,6,7,8,9};for(int i0;i&l…
四个超好用的优质资源搜索网站,海量优质资源等你发现!
在网上找资源的时候总找不到满意的优质资源?今天小编把办公室大佬珍藏多年的四个超好用优质资源搜索网站分享给你,只要你想找,没有找不到的资源!一、学习资料库学习资料库中有大量的免费学习资料,学习资料涵盖多种学科…

sql server 2008 修改sa密码
问题: 当我们用windows本身验证之后需要修改sa密码,出现这样的错误。 解决方案: 转载于:https://www.cnblogs.com/hcfan/p/4164777.html

Sql Server数据库连接Oracle数据库
Select * From opendatasource(MSDAORA, Data SourceAPPDATA;User IDuname;Passwordpwd)..BYERP.MAT_CLASS APPDATA--连接字符串名称 用户.表名 http://www.cnblogs.com/luqingfei/articles/538005.html转载于:https://www.cnblogs.com/hanwater/archive/2009/12/04/1616864.ht…

普通二叉树、二叉查找树、平衡二叉树常见操作汇总
目录 总览表 普通二叉树 二叉查找树 平衡二叉树 总览表 普通二叉树 struct Node{int data;Node* lchild,rchild; };Node* newNode(int v){Node* node new Node;//申请变量的地址空间node->lchild node->rchild NULL;//新建的结点没有左右孩子node->data v;//…

Java IO系列之字节流拷贝文件性能比较
Java IO 字节流基类 InputStream--输入流, OutPutStream--输出流, 输入流用于读,输出流用于写. 字节流默认一次只读取或输出一个字节。 package jonavin.io;import java.io.BufferedInputStream; import java.io.BufferedOutputStream; impo…

引用 提高开发水平的几项必备技术
很好的一篇文章!!!(偶遇此文,英雄所见略同!) 本文列出了当今计算机软件开发和应用领域最重要十种关键技术排名,如果你想保证你现在以及未来的几年不失业,那么你最好跟上这些技术的发展。虽然你不必对这十种…

移动磁盘由于IO设备错误,要怎样寻回文件
J盘打不开由于IO设备错误,是因为这个I盘的文件系统内部结构损坏导致的。要恢复里面的数据就必须要注意,这个盘不能格式化,否则数据会进一步损坏。具体的恢复方法看正文 工具/软件:流星数据恢复软件 步骤1:先百度搜索并…

1043 Is It a Binary Search Tree
1. 这是二叉查找树BST那节的习题,要做出来这题,需要具备的基础知识有:BST的创建,涉及函数createBST,insertBST,newNode,二叉树的先序遍历、后序遍历。 2. 需要转过来的弯的有: 给定…