描述:
一棵树有n个节点,其中1号节点为根节点。
输入:
输入有多组数据。
每组输入一个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<bits/stdc++.h>
using namespace std;
struct node
{
vector<int> child;
}node[10001];
//利用层序遍历求高度
int maxHeight(int root)
{
queue<int> q;
q.push(root);
int height = 0;
while(!q.empty())
{
height++;
int size = q.size();
for(int i=0;i<size;i++)
{
int front = q.front();
q.pop();
for(int i =0;i<node[front].child.size();i++)
{
q.push(node[front].child[i]);
}
}
}
return height;
}
int main()
{
int n;
while(cin>>n)
{
set<int> s;//用set处理输入若干行,即所有结点都用了就结束
for(int i=1;i<=n;i++)
{
s.insert(i);
}
while(s.size()!=0)
{
int a,b;
cin>>a>>b;
s.erase(a);
s.erase(b);
node[a].child.push_back(b);
}
cout<<maxHeight(1)<<endl;
}
return 0;
}
problem A:树查找
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(cin>>n&&n!=0)
{
int a[1001];
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
int d;
cin>>d;
int maxHeight = (int) ceil(log(n+1)/log(2));//完全二叉树树高公式
if(d>maxHeight||d<1)
cout<<"EMPTY"<<endl;
else
{
int sum = pow(2,d-1);//该行共有多少个结点
int index = pow(2,d-1);//第一个结点的下标
while(sum--)
{
cout<<a[index++]<<" ";
}
}
}
return 0;
}