《算法笔记》9.3小节——数据结构专题(2)->树的遍历 问题 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

分析: 由于是完全二叉树,可以用数组存储。直接找到某一层对应的编号输出即可。或者按层次分别存储。

cpp 复制代码
#include    <algorithm>
#include     <iostream>
#include      <cstdlib>
#include      <cstring>
#include       <string>
#include       <vector>
#include       <cstdio>
#include        <queue>
#include        <stack>
#include        <ctime>
#include        <cmath>
#include          <map>
#include          <set>
#include<unordered_map>
#define INF 0x3f3f3f3f
#define db1(x) cout<<#x<<"="<<(x)<<endl
#define db2(x,y) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<endl
#define db3(x,y,z) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<endl
#define db4(x,y,z,a) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#a<<"="<<(a)<<endl
#define db5(x,y,z,a,r) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#a<<"="<<(a)<<", "<<#r<<"="<<(r)<<endl
using namespace std;

int main(void)
{
    #ifdef test
    freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    clock_t start=clock();
    #endif //test

    int n;
    while(scanf("%d",&n),n)
    {
        int num[11][1026];memset(num,0,sizeof(num));
        int len[15]={0,1,2,4,8,16,32,64,128,256,512,1024};
        int index=1;
        for(int i=0;i<n;++i)
        {
            int a;scanf("%d",&a);
            if(num[index][0]<len[index])
            {
                num[index][num[index][0]+1]=a,num[index][0]++;
            }
            else
            {
                index++;
                num[index][num[index][0]+1]=a,num[index][0]++;
            }
        }
        int d;scanf("%d",&d);
        if(num[d][0]==0)printf("EMPTY\n");
        else
        {
            for(int j=1;j<=num[d][0];++j)
            {
                if(j==1)printf("%d",num[d][j]);
                else printf(" %d",num[d][j]);
            }printf("\n");
        }
    }

    #ifdef test
    clockid_t end=clock();
    double endtime=(double)(end-start)/CLOCKS_PER_SEC;
    printf("\n\n\n\n\n");
    cout<<"Total time:"<<endtime<<"s"<<endl;        //s为单位
    cout<<"Total time:"<<endtime*1000<<"ms"<<endl;    //ms为单位
    #endif //test
    return 0;
}
相关推荐
杰克尼24 分钟前
415. 字符串相加
算法
lifallen35 分钟前
JCTools 无锁并发队列基础:ConcurrentCircularArrayQueue
java·开发语言·数据结构·算法
来自天蝎座的孙孙2 小时前
洛谷P1595讲解(加强版)+错排讲解
python·算法
GawynKing2 小时前
图论(5)最小生成树算法
算法·图论·最小生成树
试剂界的爱马仕2 小时前
胶质母细胞瘤对化疗的敏感性由磷脂酰肌醇3-激酶β选择性调控
人工智能·科技·算法·机器学习·ai写作
打不了嗝 ᥬ᭄2 小时前
Linux 信号
linux·开发语言·c++·算法
张子夜 iiii3 小时前
机器学习算法系列专栏:主成分分析(PCA)降维算法(初学者)
人工智能·python·算法·机器学习
一匹电信狗3 小时前
【C++】异常详解(万字解读)
服务器·c++·算法·leetcode·小程序·stl·visual studio
sp423 小时前
白话 LRU 缓存及链表的数据结构讲解(二)
算法
PineappleCoder4 小时前
为什么说发布 - 订阅是代码的 “万能胶水”?解耦逻辑全解析
前端·javascript·算法