九度OJ——1176树查找

题目描述:
有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。该树是完全二叉树。
输入:
输入有多组数据。
每组输入一个n(1<=n<=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。
输出:
输出该树中第d层得所有节点,节点间用空格隔开,最后一个节点后没有空格。
样例输入:
4
1 2 3 4
2
样例输出:
2 3


思路:
用数组存储完全二叉树,首先找到指定层的定一个元素的下标i,判断2*i-1(对应满二叉树的该层的最后一个元素)是否属于这个完全二叉树,若是则打印从i到2*i-1的元素,若不是但i是则打印从i到N的元素,否则输出EMPTY。
AC代码:

#include <iostream>
#include <cmath> 
#include <cstring>
using namespace std;

int Tree[1001] = {0};
int N,level,start;

int main()
{
    while(cin>>N){
        memset(Tree,0,sizeof(Tree[0])*1001);
        for(int i = 1 ; i <= N ; i++){
            cin>>Tree[i];
        }
        cin>>level;
        start = 1;
        while(level > 1){
            start *= 2;
            level--;
        }
        if(start*2-1 <= N){//该层最后一个结点属于二叉树 
            cout<<Tree[start];
            for(int i = start+1 ; i <= start*2-1 ; i++){
                cout<<" "<<Tree[i];     
            }       
        }else if(start <= N && start*2-1 > N){
            cout<<Tree[start];
            for(int i = start+1 ; i <= N ; i++){
                cout<<" "<<Tree[i]; 
            }
        }else{
            cout<<"EMPTY";
        }
        cout<<endl; 
    }

    return 0;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daipuweiai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值