1. 程式人生 > >zcmu-4932: 樹查詢

zcmu-4932: 樹查詢

4932: 樹查詢

Time Limit: 1 Sec  Memory Limit: 32 MB
Submit: 26  Solved: 16
[Submit][Status][Web Board]

Description

有一棵樹,輸出某一深度的所有節點,有則輸出這些節點,無則輸出EMPTY。該樹是完全二叉樹。

Input

 

輸入有多組資料。
每組輸入一個n(1<=n<=1000),然後將樹中的這n個節點依次輸入,再輸入一個d代表深度。

 

Output

 

輸出該樹中第d層得所有節點,節點間用空格隔開,最後一個節點後沒有空格。

 

Sample Input

5 1 2 3 4 5 7 7 1 2 3 4 5 6 7 2 0

Sample Output

EMPTY 2 3

HINT

 

Source


 

做下水題還是很快樂的~ 


#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <map>
#include <list>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <iostream>
#define go(i,a,b) for(int i=a;i<=b;i++)
#define og(i,a,b) for(int i=a;i>=b;i--)
#define mem(a) memset(a,0,sizeof(a))
#define cs cout<<"-----"<<endl;
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn = 2e3 + 5;
typedef long long ll;
int a[maxn];
int main()
{
    int n,d;
    while(scanf("%d",&n) && n)
    {
        go(i,1,n) cin>>a[i];
        cin>>d;
        int s = pow(2,d-1);//第d層第一個節點編號
        int c = s;//第d層共有幾個節點
        if(s+c-1 > n)
            cout<<"EMPTY"<<endl;
        else
        {
            go(i,s,s+c-1)
            {
                if(i == s)
                    printf("%d",a[i]);
                else
                    printf(" %d",a[i]);
            }
            cout<<endl;
        }
    }
    return 0;
}