问题 A: 树查找
时间限制: 1 Sec 内存限制: 32 MB
提交: 238 解决: 135
[提交][状态][讨论版][命题人:外部导入]
题目描述
有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。该树是完全二叉树。
输入
输入有多组数据。
每组输入一个n(1<=n<=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。
输出
输出该树中第d层得所有节点,节点间用空格隔开,最后一个节点后没有空格。
样例输入
5 1 2 3 4 5 7 7 1 2 3 4 5 6 7 2 0
样例输出
EMPTY 2 3
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
int main(){
// freopen("inputa.txt","r",stdin);
int n,a[1010],d;
while(cin>>n&&n){
for(int i=1;i<=n;i++) cin>>a[i];
cin>>d;
int s=1<<(d-1),e=(1<<d)-1;//2^(d-1)--2^d-1
if(s>n) cout<<"EMPTY"<<endl;
else{
for(int i=s;i<=e;i++){
cout<<a[i];
if(i<e) cout<<" ";
}
cout<<endl;
}
}
return 0;
}
问题 B: 树的高度
时间限制: 1 Sec 内存限制: 128 MB
提交: 208 解决: 125
[提交][状态][讨论版][命题人:外部导入]
题目描述
一棵树有n个节点,其中1号节点为根节点。
输入
第一行是整数n,表示节点数
后面若干行,每行两个整数a b,表示b是a的子节点。
输出
求这棵树的高度(根节点为第1层)
样例输入
5 1 2 1 3 3 4 3 5
样例输出
3
提示:本题的结点值范围就是1~n,就一组测试数据,文件结束符结束即可
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
vector<int> child[1010];
int maxd=0;
bool visit[1010]={0};
void DFS(int root,int deep){
//访问此结点
if(visit[root]==true) return;
deep++;
if(maxd<deep) maxd=deep;
visit[root]=true;
for(int i=0;i<child[root].size();i++){
DFS(child[root][i],deep);
}
}
int main(){
// freopen("inputb.txt","r",stdin);
int n,a,b;
cin>>n;
while(cin>>a>>b){
child[a].push_back(b);
}
for(int i=1;i<=n;i++){
if(!visit[i]) DFS(i,0);
}
cout<<maxd<<endl;
return 0;
}