一、二叉树(60分)

给你一个整数序列,用这些数构成一个完全二叉排序树,输出此二叉树的层序遍历序列。输入的第一行是一个整数n,表示这个整数序列的长度,输入的第二行包含n个整数,每个数代表完全二叉排序树的一个节点,现在需要输出由这n个整数构成的完全二叉排序树的层序遍历序列。

输入样例:

18
56 987 -25 0 1021 -238 399 12 77 -1 72190 -25 -168 -41367 3218 12 0 -25

输出样例:

12 -1 987 -25 0 77 3218 -238 -25 0 12 56 399 1021 72190 -41367 -168 -25

个人思路,先排序输入数组得到完全二叉树的中序遍历序列,然后构建一个完全二叉索引树(这颗完全二叉树的节点存储的值是它的层数)中序遍历完全二叉索引树得到的序列,就是前面这个排完序的数组每个元素对应层数。然后再按层数输出就行。

#include <bits/stdc++.h>
using namespace std;
vector<int>data;
vector<int>ind;
vector<int>order_data;//存放index完全二叉树的中序遍历
int n;
//中序遍历
void visits(int root){if(root>=n)return;//超过节点范围了else{visits(2*root+1);//左子树order_data.push_back(ind[root]);visits(2*root+2);//右子树}
}
int main() {cin>>n;int cnt=n;int tp;while(cnt--){cin>>tp;data.push_back(tp);}cnt=n;//构建索引树int level=0;//计算层数int count=1;for(int i=1;cnt>0;i++){level++;for(int k=0;k<count&&cnt>0;k++){ind.push_back(i);cnt--;//完全二叉树索引节点存放的是这个节点的层数}count*=2;}//排序,则得到了原来数据建立的排序完全二叉树的中序遍历sort(data.begin(),data.end());//得到数据visits(0);//输出数据vector<vector<int>>mymap(level);for(int i=0;i<n;i++){mymap[order_data[i]-1].push_back(data[i]);}for(int i=0;i<level;i++){for(int m=0;m<mymap[i].size();m++)cout<<mymap[i][m]<<" ";}
}

50行以内解决了hhh,也可以自己算其中的其他关系,但是建立索引树应该是比较快想到的思路了

二、栈(40分)

给你一个函数调用过程,求调用的最大嵌套深度所对应的函数名,并输出调用路径,同时输出这个函数父函数(调用者)的个数和被调用的次数。同一个函数,如果有多条调用路径都可使其嵌套深度最深,则只输出第一条调用路径。
        输入的数据中,若为1 funcName的形式,则表示调用funcName这个函数,若输入的是0,则表示结束对嵌套深度最大的函数的调用。

输入样例:

1 main
1 input
0
1 mysqrt
0
1 findA
0
1 findB
1 area
1 mysin
0
1 mycos
0
1 mysqrt
0
0
0
1 findC
1 area
1 mysin
0
0
1 mysqrt
1 max
0
0
0
1 output
0
0

输出样例:

mysin main-findB-area 1 2
mycos main-findB-area 1 1
mysqrt main-findB-area 3 3
max main-findC-mysqrt 1 1

个人思路:这只是简单的栈模拟,可以边输入边处理的,细心做好记录还是比较容易的

#include <bits/stdc++.h>
using namespace std;
map<string,int>mp;//记录每个函数调用次数
map<string,set<string>>fu;//记录每个函数父函数个数
vector<string>sta;//模拟栈
vector<vector<string>>data(100);//记录所有最长完整调用
int maxlen=0;int num=0;//num记录有多少个最长的调用
int main(){int op;string func;int nowlen=0;while(cin>>op){if(op==1){nowlen++;cin>>func;sta.push_back(func);//父函数if(nowlen>1){fu[func].insert(sta[nowlen-2]);}if(mp.find(func)!=mp.end())mp[func]++;elsemp[func]=1;}else{if(nowlen>maxlen){//找到一条当前最长if(num!=0){//清空之前的for(int i=0;i<num;i++)data[i].clear();num=0;}//装入新的data[num++]=sta;maxlen=nowlen;}else if(nowlen==maxlen){//看下是不是以前出现过的int flag=0;for(int i=0;i<num;i++){if(data[i][maxlen-1]==sta[nowlen-1]){flag=1;break;}}if(!flag){data[num++]=sta;}}//出栈nowlen--;sta.erase(sta.end());}}//输出for(int i=0;i<num;i++){cout<<data[i][maxlen-1]<<" ";for(int j=0;j<data[i].size()-2;j++)cout<<data[i][j]<<"-";cout<<data[i][maxlen-2]<<" ";cout<<fu[data[i][maxlen-1]].size()<<" ";cout<<mp[data[i][maxlen-1]];cout<<endl;}
}

顺便推荐一个在线编程很棒的网站:Online Compiler and IDE >> C/C++, Java, PHP, Python, Perl and 70+ other compilers and interpreters - Ideone.com

2020北航计算机夏令营机试题目个人理解相关推荐

  1. 2020北航计算机夏令营机试题目讲解

    一.二叉树(60分)   给你一个整数序列,用这些数构成一个完全二叉排序树,输出此二叉树的层序遍历序列.   输入的第一行是一个整数n,表示这个整数序列的长度,输入的第二行包含n个整数,每个数代表完全 ...

  2. 人民大学计算机夏令营试题,中国人民大学信息学院2017年夏令营机试题目(考生回忆版)...

    中国人民大学信息学院2017年夏令营机试题目(考生回忆版) (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 中国人民大学信息学院20 ...

  3. 中科大计算机科学夏令营,2019中科大计算机夏令营机试

    2019中科大计算机夏令营机试 今年是中科大计算机夏令营第一次增加上机考试,而且在离开营一个星期的时候才进行通知.极其短暂的准备时间,加上未知的不确定性,还是带来了不小的挑战.听学长说前些年科大夏令营 ...

  4. 2020复旦大学计算机夏令营机试题

    2020复旦大学计算机夏令营机试题 这个是开卷编程,不计入成绩,但是面试会问你做的情况.

  5. 2018南京大学计算机夏令营机试

    1. Count number of binary strings without consecutive 1's Given a positive integer n(3≤n≤90), count ...

  6. 计算机复试机试题目与答案,二零一四年华中科技大学计算机研究生复试机试题目...

    2014年华中科技大学计算机研究生复试机试题目 2014年研究生复试终于结束了,因为自己寻找往年机试题目的经历很艰难,故我希望为之后的学弟,学妹们提供一些资料,以供参考. 今年机试题目总共有3道,编译 ...

  7. 2020北航计算机夏令营

    自己在保研过程中通过查阅学长学姐的面经贴,收获很大.所以自己也写一个夏令营总结,希望能帮助到后面的学弟学妹们. 北航的夏令营感觉机制非常成熟,也很有目的性,上来没有很多余的工作,就是机试,然后面试,然 ...

  8. 记2018年北理计算机夏令营+机试

    个人情况: 2015级 山东大学 成绩排名13/294, 综合排名11/294,四六级552/476 竞赛 包括英特尔杯三等奖,数字媒体科技作品竞赛三等奖,和山东省大学生软件大赛一等奖 科研 没有论文 ...

  9. 2020同济大学电子与信息工程学院计算机系夏令营机试题目【含题解、注释】

    第一题:签到题(10分) [题目要求]: 键盘依次输入 4 个字符串,分别是临时学号.姓名.报考类别和本科学校,按右对齐方式输出,要求其中最长的字符串输出时左边无空格,4 行的冒号对齐,冒号为半角字符 ...

最新文章

  1. php 有 stringbuffer,string,stringbuffer以及stringbuilder的区别
  2. 微软sccm服务器,System Center 2012R2系列之SCCM部署
  3. C# 执行查询语句,返回DataSet
  4. mysql云上迁移_自建mysql 迁移到云上-问答-阿里云开发者社区-阿里云
  5. 集成druid实现数据库密码加密功能
  6. 一个快速排序写了快 10000 字?
  7. Android异步加载全解析之引入二级缓存
  8. 前端自动化构建工具gulp的使用介绍
  9. 灰狼优化算法与影响力最大化问题
  10. python学习笔记——类与对象、常用函数
  11. XJTU 算法设计与问题求解作业题 第一周
  12. 机器学习 --- 朴素贝叶斯分类器
  13. java hypot_Java StrictMath hypot()用法及代码示例
  14. 同等学力计算机科学与技术真题-2006年
  15. mysql lbs_基于LBS的地理位置附近的搜索以及由近及远的排序(MYSQL)
  16. windows 平台下curl使用报错: (3) [globbing] unmatched close brace/bracket in column 13
  17. 1C.小a与星际探索(C++)
  18. HDFS 本地编程报错java.net.ConnectException: Call From LAPTOP-LJF22VB3/192.168.56.1 to 192.168
  19. TI杯 LaunchPad MSP430开发环境搭建
  20. java 显示中文_java显示中文乱码的解决方法

热门文章

  1. vsCode 快捷键
  2. matlab如何画双x坐标,matlab画双坐标图
  3. Sequence的层次化
  4. matlab音乐键盘模拟,科学网—[原][Matlab][04] Midi音乐键盘 - 王楠的博文
  5. jzoj 高中 1285——奶酪厂
  6. mysql association_MyBatis的association示例——MyBatis学习笔记之三
  7. 记录锁、间隙锁和临键锁
  8. 为什么样本方差里面要除以(n-1)而不是n?
  9. MYSQL数据库(九)- 修改数据表名称、列名称
  10. 阿拉伯数字和汉字对照表