问题 A: 树查找
题目描述
有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。该树是完全二叉树。
输入
输入有多组数据。
每组输入一个n(1<=n<=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。
输出
输出该树中第d层得所有节点,节点间用空格隔开,最后一个节点后没有空格。
样例输入 Copy
5 1 2 3 4 5 7 7 1 2 3 4 5 6 7 2 0
样例输出 Copy
EMPTY 2 3
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 10000;
int n, d;
struct node{
int layer;
int data;
}BiTree[maxn];
int nums[maxn];
/*重建*/
void create(){
for(int i=1; i<=n; i++){
BiTree[i].data = nums[i];
BiTree[i].layer = (int)log2(i)+1;
}
}
int main(){
while(scanf("%d", &n)!=EOF){
if(n==0) break;
for(int i=1; i<=n; i++){
scanf("%d", &nums[i]);
}
scanf("%d", &d);
create();
bool flag = false;
for(int i=1; i<=n; i++){
if(BiTree[i].layer==d){
flag = true;
if(BiTree[i+1].layer==d)
printf("%d ", BiTree[i].data);
else
printf("%d", BiTree[i].data);
}
if(BiTree[i].layer>d)
break;
}
if(flag == false)
printf("EMPTY\n");
else
printf("\n");
}
return 0;
}