1494 - 树查找
时间限制 : 1 秒
内存限制 : 32 MB
有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。该树是完全二叉树。
题目输入
输入有多组数据。<br />
每组输入一个n(1<=n<=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。
<br />
题目输出
输出该树中第d层得所有节点,节点间用空格隔开,最后一个节点后没有空格。
<br />
输入/输出样例
输入格式
5 1 2 3 4 5 7 7 1 2 3 4 5 6 7 2 0
输出格式
EMPTY 2 3
C语言解答
#include <stdio.h> #include <string.h> int main(void) { int arr[1001]; int i,s; int n,d; while(scanf("%d",&n)==1) { if(n==0)break; for(i=1;i<=n;i++) scanf("%d",arr+i); scanf("%d",&d); for(s=1,i=1;i<=d-1;i++) s=s*2; if(n<s) printf("EMPTY\n"); else { for(i=s;i<=n&&i<=2*s-2;i++) printf("%d ",arr[i]); printf("%d\n",arr[i]); } } return 0; }
C++解答
#include <stdio.h> int n; void run() { int i,a[1111],d,s=1,e; for(i=1;i<=n;i++) scanf("%d",&a[i]); scanf("%d",&d); for(i=1;i<d;i++) { s*=2; if(s>n) { printf("EMPTY\n"); return; } } e=s*2-1; if(e>n) e=n; for(i=s;i<e;i++) printf("%d ",a[i]); printf("%d\n",a[e]); } int main() { scanf("%d",&n); while(n!=0) { run(); n=0; scanf("%d",&n); } return 0; }