1. 遍历二叉树

【问题描述】

以先序的方式建立一棵二叉树,空结点用‘#’号表示,例如:abd###ce##f##,将建立一棵如下的二叉树:

输出其中序序列和后序序列,其中总结点个数不超过100。

输入:仅一行,输入一串字符串,该字符串必须能构成一棵二叉树;

输出:两行,第一行为中序序列,第二行为后序序列。

【样例输入】

abd###ce##f##

【样例输出】

dbaecf

dbefca

#include<iostream>
using namespace std;
struct node{
char value;
int left,right;//左右孩子子树
}data[];
char ch;
int cnt,root;
//建立一棵二叉树 abd###ce##f##
int buildTree(int bt){
cin >> ch;
if(ch == '#'){
bt = ;
}
else{
bt = ++cnt;
data[bt].value = ch;
data[bt].left = data[bt].right = ;
data[bt].left = buildTree(bt);
data[bt].right = buildTree(bt);
}
return bt;
}
//中序序列
void MidTree(int bt){
if(bt){
MidTree(data[bt].left);
cout << data[bt].value;
MidTree(data[bt].right);
}
}
//后序序列
void LastTree(int bt){
if(bt){
LastTree(data[bt].left);
LastTree(data[bt].right);
cout << data[bt].value;
}
}
int main()
{
root = ;
cnt = ;
root = buildTree();
MidTree(root);
cout << endl;
LastTree(root);
return ;
}

2. 计算二叉树的结点个数

【问题描述】

以先序的方式建立一棵二叉树,空结点用‘#’号表示,例如:abd###ce##f##,将建立一棵如下的二叉树:

输出其总结点的个数,其中总结点个数不超过100。

输入:仅一行,输入一串字符串,该字符串必须能构成一棵二叉树;

输出:仅一行,为该二叉树的结点个数。

【样例输入】

abd###ce##f##

【样例输出】

6

#include<iostream>
using namespace std;
struct node{
char value;
int left,right;//左右孩子子树
}data[];
char ch;
int cnt,root;
//建立一棵二叉树 abd###ce##f##
int buildTree(int bt){
cin >> ch;
if(ch == '#'){
bt = ;
}
else{
bt = ++cnt;
data[bt].value = ch;
data[bt].left = data[bt].right = ;
data[bt].left = buildTree(bt);
data[bt].right = buildTree(bt);
}
return bt;
}
//计算结点数
int Node(int bt){
if(bt){
if(data[bt].left == && data[bt].right == ) return ;
else return Node(data[bt].left)+Node(data[bt].right) + ;
}
else return ;
}
int main()
{
root = ;
cnt = ;
root = buildTree();
cout << Node(root) << endl;
return ;
}

3. 计算二叉树的叶子结点个数

【问题描述】

以先序的方式建立一棵二叉树,空结点用‘#’号表示,例如:abd###ce##f##,将建立一棵如下的二叉树:

输出其叶子结点的个数,其中总结点个数不超过100。

输入:仅一行,输入一串字符串,该字符串必须能构成一棵二叉树;

输出:仅一行,为该二叉树的叶子结点的个数。

【样例输入】

abd###ce##f##

【样例输出】

3

#include<iostream>
using namespace std;
struct node{
char value;
int left,right;//左右孩子子树
}data[];
char ch;
int cnt,root;
//建立一棵二叉树 abd###ce##f##
int buildTree(int bt){
cin >> ch;
if(ch == '#'){
bt = ;
}
else{
bt = ++cnt;
data[bt].value = ch;
data[bt].left = data[bt].right = ;
data[bt].left = buildTree(bt);
data[bt].right = buildTree(bt);
}
return bt;
}
//计算叶子数
int Leaf(int bt){
if(bt){
if(data[bt].left == && data[bt].right == ){
return ;
}
else return Leaf(data[bt].left)+Leaf(data[bt].right);
}
else return ;
}
int main()
{
root = ;
cnt = ;
root = buildTree();
cout << Leaf(root) << endl;
return ;
}

4. 解密犯罪团伙

【问题描述】

快过年了,犯罪分子们也开始为年终奖“奋斗”了,小明的家乡出现了多次抢劫事件。由于强盗人数过于庞大,作案频繁,警方想查清楚到底有几个犯罪团伙实在是太不容易了,不过呢,经过很多天的努力,警察叔叔还是搜集到了一些线索,需要聪明的我们编写程序帮助警察叔叔分析一下有多少个独立的犯罪团伙?

输入格式:输入第一行为n,m,n表示强盗的人数,m表示警方搜集到的m条线索。接下来m行每一行有两个数a,b,表示强盗a和强盗b是通过。

数据范围说明:(1≤n≤20000),(1≤m≤1000000),1≤a,b≤n。

【输入样例】

10 9

1 2

3 4

5 2

4 6

2 6

8 7

9 7

1 6

2 4

【输出样例】

3

#include<iostream>
using namespace std;
int f[] = {},n,m,k,sum = ;
//数组初始化,数组里存的是自己的下标
void init(){
for(int i = ; i <= n; i++){
f[i] = i;
}
}
//查找过程
int getf(int v){
if(f[v] == v){
return v;
}
else{
f[v] = getf(f[v]);
return f[v];
}
}
//合并的过程
void merge(int x, int y){
int t1,t2;
t1 = getf(x);
t2 = getf(y);
if(t1 != t2){
f[t2] = t1;
}
}
int main()
{
int i,x,y;
cin >> n >> m;
init();
for(i = ; i <= m; i++){
cin >> x >> y;
merge(x,y);
}
for(i = ; i <= n; i++){
if(f[i] == i) sum++;
}
cout << sum << endl;
return ;
}

1. 小球下落

【问题描述】

许多的小球一个一个的从一棵满二叉树上掉下来组成FBT(Full Binary Tree,满二叉树),每一时间,一个正在下降的球第一个访问的是非叶子节点。然后继续下降时,或者走右子树,或者走左子树,直到访问到叶子节点。决定球运动方向的是每个节点的布尔值。最初,所有的节点都是false,当访问到一个节点时,如果这个节点时false,则这个球把它变成true,然后从左子树走,继续他的旅程。如果节点时true,则球也会改变它为false,而接下来从右子树走。满二叉树的标记方法如下图:

因为所有的节点最初为false,所以第一个球将会访问节点1,节点2和节点4,转变节点的布尔值后在节点8停止。第二个球将会访问节点1,3,6,在节点12停止。明显地,第三个球在它停止之前,会访问节点1,2,5,在节点10停止。现在你的任务是,给定FBT的深度D,和I,表示第I个小球下落,你可以假定I不超过给定的FBT的叶子树,写一个程序求小球停止时的叶子序号。

输入:仅一行,包含两个用空格隔开的整数D和I(2≤D≤20,I≤I≤524288)。

输出:对应输出第1个小球下落停止时的叶子序号。

【样例输入】4 2

【样例输出】12

#include<iostream>
using namespace std;
bool tree[*];
int main()
{
int d,k,i,j,p;
cin >> d >> k;
for(i = ; i <= k; i++){ //枚举每一个球的下落情况
p = ;
for(j = ; j < d; j++){
if(tree[p] == false){ //结点的值为0
tree[p] = true;
p *= ; //向左走
}
else{ //结点的值为 1
tree[p] = false;
p = p*+; //向右走
}
}
}
cout << p << endl;
return ;
}

noip第21课作业的更多相关文章

  1. noip第34课作业

    1.    信息加密 [问题描述] 在传递信息的过程中,为了加密,有时需要按一定规则将文本转换成密文发送出去.有一种加密规则是这样的:1. 对于字母字符,将其转换成其后的第3个字母.例如:A→D,a→ ...

  2. noip第27课作业

    1. 繁忙的都市 [问题描述] 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个 ...

  3. noip第5课作业

    1.     计算税收 [问题描述] 对某产品征收税金,在产值1万元以上收税5%:在1万元以下但在5000元或者以上的征收税3%:在5000元以下但在1000元或以上征收税2%:1000元以下的免收税 ...

  4. noip第4课作业

    1.    计算邮资 [问题描述] 根据邮件的重量和用户是否选择加急计算邮费.计算规则:重量在1000克以内 (包含1000克),基本费8元.超过1000克的部分,每500克加收超重费4元,不足500 ...

  5. noip第9课作业

    1.    打印乘法表 [问题描述] 用for循环实现输出1至9的乘法表 [样例输出] 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4 ...

  6. noip第21课资料

  7. noip第33课作业

    1.    排座椅 [问题描述] 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同 ...

  8. noip第29课作业

    1.   钢条切割 [问题描述] 一家公司购买长钢条,将其切割成短钢条出售,切割本身没有成本,长度为i的短钢条的价格为Pi.那给定一段长度为n的钢条和一个价格表Pi,求钢条的切割方案使得收益Rn最大. ...

  9. noip第28课作业

    分段数列 [问题描述] 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入格式: 输入第1行包含两个正整 ...

随机推荐

  1. 10.23JS日记

    1.逻辑运算 ||  &&  ! ||:遇到第一个为true的值就中止并返回 &&:遇到第一个为false的值就中止并返回,如果没有false值,就返回最后一个不是fa ...

  2. 金老师的经典著作《一个普通IT人的十年回顾》

    学习人生             -------一个普通IT人的十年回顾(上)序从1994到2003,不知不觉之间,我已在计算机技术的世界里沉浸了十年.有位哲人说过:如果一个人能用十年的时间专心致志地 ...

  3. Linux移植之子目录下的built-in.o生成过程分析

    在Linux移植之make uImage编译过程分析中罗列出了最后链接生成vmlinux的过程.可以看到在每个子目录下都有一个built-in.o文件.对于此产生了疑问built-in.o文件是根据什 ...

  4. u-boot之ARM920T的start.S分析

    cpu/arm920t/start.S程序步骤大致有以下几个 1.设置中断向量表 2.设置CPU模式为SVC32 mode并且关闭IRQ与FIQ中断 3.关闭看门狗 4.屏蔽所有中断 5.判断程序是否 ...

  5. andorid 进度条和图片的透明度

    layout.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  6. Delphi,C语言互通脚本引擎研究

    基于大神akuma的脚本引擎. 下面是demo

  7. EL(表达式语言)

    EL表达式的主要作用 1)获取数据.EL使得获取JavaBean中的数据变得非常简单,也可以替换JSP页面中的脚本元素,从各种类型的web域中获取数据. 2)执行运算.利用EL表达式可以在JSP页面中 ...

  8. macOS X Mount NFS Share / Set an NFS Client

    last updated November 3, 2018 in CategoriesLinux, Mac OS X, UNIX How do I access my enterprise NAS s ...

  9. js值类型与引用类型

    JavaScript值类型和引用类型有哪些 (1)值类型:数值.布尔值.null.undefined. (2)引用类型:对象.数组.函数. 三.如何理解值类型和引用类型及举例 我们可以用“连锁店”和“ ...

  10. centos6 搭建nginx实现负载均衡

    一.安装nginx 1)准备2台服务器,环境一样,同时执行 rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.r ...