题目1176:树查找
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:8382
解决:3466
-
题目描述:
-
有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。该树是完全二叉树。
-
输入:
-
输入有多组数据。
每组输入一个n(1<=n<=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。
-
输出:
-
输出该树中第d层得所有节点,节点间用空格隔开,最后一个节点后没有空格。
-
样例输入:
-
4 1 2 3 4 2
-
样例输出:
-
2 3
-
来源:
- 2010年北京邮电大学网院研究生机试真题
-
#include <cstdio> #include <cstring> using namespace std; int a[1010]; int main(){ int n,d,left,right; while(scanf("%d",&n)!=EOF){ memset(a,0,sizeof(a)); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } scanf("%d",&d); int depth=d-1; left=right=1; while(depth!=0){ left=2*left; right=2*right+1; depth--; } //printf("left=%d right=%d\n",left,right); if(n<left){ printf("EMPTY\n"); }else if(n>=left&&n<=right){ for(int i=left;i<n;i++){ printf("%d ",a[i]); } printf("%d\n",a[n]); }else if(n>right){ for(int i=left;i<right;i++){ printf("%d ",a[i]); } printf("%d\n",a[right]); } } return 0; }
利用完全二叉树的性质,不需要构造二叉树。