- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
一、简答题
1、1.模拟树遍历
二叉树的中序遍历可以借助一个堆栈来用非递归的方式实现。例如,对一棵有6
个结点的二叉树(结点键值从1到6)进行遍历,堆栈操作为:push(1);push(2);
push(3);pop();pop();push(4);pop();pop();push(5);push(6);pop();pop()——其中
push为入栈,pop为出栈。则这套操作对应了一棵唯一的二叉树,如下图所示。
你的任务是输出这棵树的后序遍历序列。
时间限制:1000
内存限制:262144
输入
输入第一行给出一个正整数N(≤30),是二叉树中结点的个数(结点键值从1到
N)。随后2N行,每行给出一个堆栈操作:`PushX`表示将键值为`X`
的结点入栈,`Pop`表示将一个结点出栈。
输出
在一行中输出该树后序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空
格。裁判保证输入数据一定对应了一棵树。
样例输入
6
Push1
Push2
Push3
Pop
Pop
Push4
Pop
Pop
Push5
Push6
Pop
Pop
样例输出
342651
解析:
根据题目描述,给定的堆栈操作序列对应了一棵二叉树。要得到这棵树的后序遍历
序列,我们可以使用非递归的方式进行模拟。
首先,根据输入的堆栈操作序列,我们可以模拟整个二叉树的构建过程。在模拟过
程中,可以使用一个堆栈来辅助处理。具体步骤如下:
1.创建一个空堆栈。
2.按照输入的堆栈操作序列进行模拟:
o遇到“PushX”操作,将键值为X的结点入栈。
o遇到“Pop”操作,执行出栈操作,并处理出栈的结点:
▪如果该结点的右子树已经处理完毕(即右子结点已经出栈),
并且左子树也处理完毕(左子结点已出栈或不存在),那么该
结点就是后序遍历的当前结点,将其加入结果序列。
▪否则,将该结点重新入栈,等待后续处理。
3.当所有堆栈操作处理完毕后,如果堆栈中还有剩余的结点,依次弹出并加入
结果序列,这些结点是后序遍历的最后一个结点。
根据给定的样例输入,我们可以模拟整个过程并得到后序遍历序列为342651。
2、2.寻宝图
给定一幅地图,其中有水域,有陆地。被水域完全环绕的陆地是岛屿。有些岛屿上
埋藏有宝藏,这些有宝藏的点也被标记出来了。本题就请你统计一下,给定的地图
上一共有多少岛屿,其中有多少是有宝藏的岛屿。
时间限制:1000
内存限制:262144
输入
输入第一行给出2个正整数N和M(1N×M≤
105),是地图的尺寸,表示地图由N行M列格子构成。随后N行,每行给出M
位个位数,其中`0`表示水域,`1`表示陆地,`2`-`9`表示宝藏。
注意:两个格子共享一条边时,才是“相邻”的。默认地图外围全是水域。
输出
在一行中输出2个整数,分别是岛屿的总数量和有宝藏的岛屿的数量。
样例输入
1011
01000000151
11000000111
00110000811
00110100010
00000000000
00000111000
00114111000
00110010000
00019000010
00120000001
样例输出
72
解析:
{针对这个问题,我们可以使用深度优先搜索(DFS)算法来解决。首先,我们需
要读取地图的尺寸和具体的格子数据。然后,我们可以初始化两个计数器,一个用
于统计岛屿的总数量,另一个用于统计有宝藏的岛屿的数量。
接下来,我们遍历整个地图。对于每一个陆地格子,我们进行深度优先搜索。在搜
索的过程中,我们将遇到的每一个陆地格子都标记为已访问过,以避免重复搜索。
如果我们在搜索的过程中遇到了水域或者已经访问过的格子,我们就停止搜索。每
次搜索完毕,岛屿数量加一。
同时,在搜索的过程中,我们需要检查这个岛屿上是否有宝藏。如果有宝藏,有宝
藏的岛屿数量也加一。
最后,我们输出岛屿的总数量和有宝藏的岛屿的数量。
根据题目的要求,我们需要特别注意地图的边缘都是水域,因此在搜索的过程中需
要注意边界条件。另外,由于题目的数据
原创力文档


文档评论(0)