问题 A: 树查找
时间限制: 1 Sec 内存限制: 32 MB
提交: 76 解决: 53
题目描述
有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出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 <cstdio>
#include <cmath>
int index[12],tree[1010];
void compute()
{
for(int i=0;i<12;++i)
{
index[i]=(int)pow(2.0,1.0*i);
}
}
int deep(int number)
{
int i;
for(i=0;i<12;++i)
if(number<index[i])
break;
return i;
}
int main()
{
int m,n,md,nd,number;
compute();
while(~scanf("%d",&n))
{
if(n==0)
break;
for(int i=0;i<n;i++)
{
scanf("%d",&tree[i]);
}
scanf("%d",&m);
nd=deep(n);
if(m>nd)
{
printf("EMPTY\n");
}
else if(m==nd)
{
for(int i=index[nd-1]-1;i<n;i++)
{
if(i<n-1)
printf("%d ",tree[i]);
else
printf("%d\n",tree[i]);
}
}
else
{
for(int i=index[m-1]-1;i<index[m]-1;++i)
{
if(i<index[m]-2)
printf("%d ",tree[i]);
else
printf("%d\n",tree[i]);
}
}
}
return 0;
}