前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >九度OJ——1176树查找

九度OJ——1176树查找

作者头像
AI那点小事
发布2020-04-18 19:54:47
5480
发布2020-04-18 19:54:47
举报
文章被收录于专栏:AI那点小事

题目描述: 有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出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代码:

代码语言:javascript
复制
#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;
 } 

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档