问题 A: 树查找
题目描述
有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出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
accept code:
/*开始的思路完全走偏,一开始想先建立一个完全二叉树然后再层次遍历,
看见完全二叉树的规律发现可以直接进行计算*/
#include <iostream>
#define maxn 1010
#include <bits/stdc++.h>
using namespace std;
int main()
{
int node[maxn];
int n,d;
while(cin>>n)
{
if(n==0) break;
for(int i=0;i<n;i++)
{
cin>>node[i];
}
cin>>d;
int layersum=pow(2,d-1);//完全二叉树的每一层的节点个数,同时也是每一层的第一个节点的下标
if(layersum>n) cout<<"EMPTY"<<endl;
else{
for(int i=layersum;i<=n&&i<=2*layersum-1;i++)//这里注意完全二叉树每一层最后一个节点的下标等于第一个节点下标的2倍-1
{
cout<<node[i-1];
if(i<n) cout<<" ";
}
cout<<endl;
}
}
return 0;
}