题目描述 有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出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
思路:计算第d层是否为最后一层,分类讨论。
#include <cstdio>
int sum[12] = {1}, Node[1010];
int deep(int ans) {
int i;
for (i = 0; i < 12; i++) {
if (ans < sum[i]) {
break;
}
}
return i;
}
int main() {
for (int i = 1; i < 12; i++) {
sum[i] = sum[i - 1] * 2;
}
int n, d, nd;
while (scanf("%d", &n), n != 0) {
for (int i = 0; i < n; i++) {
scanf("%d", &Node[i]);
}
scanf("%d", &d);
nd = deep(n);
if (d > nd) {
printf("EMPTY\n");
} else if (d == nd) {
for (int i = sum[d - 1] - 1; i < n; i++) {
if (i < n - 1)
printf("%d ", Node[i]);
else
printf("%d\n", Node[i]);
}
} else {
for (int i = sum[d - 1] - 1; i < sum[d] - 1; i++) {
if (i < sum[d] - 2) {
printf("%d ", Node[i]);
} else {
printf("%d\n", Node[i]);
}
}
}
}
return 0;
}
|