《算法笔记》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;
}
相关推荐
小wanga5 分钟前
【递归、搜索与回溯】专题三 穷举vs暴搜vs回溯vs剪枝
c++·算法·机器学习·剪枝
天宫风子15 分钟前
线性代数小述(一)
线性代数·算法·矩阵·抽象代数
hjyowl33 分钟前
题解:AT_abc407_c [ABC407C] Security 2
c语言·开发语言·算法
ai产品老杨2 小时前
减少交通拥堵、提高效率、改善交通安全的智慧交通开源了。
前端·vue.js·算法·ecmascript·音视频
小于不是小鱼呀2 小时前
手撕 K-Means
人工智能·算法·机器学习
m0_740154672 小时前
K-Means颜色变卦和渐变色
算法·机器学习·kmeans
东皇太星2 小时前
SIFT算法详细原理与应用
图像处理·算法·计算机视觉
鑫鑫向栄2 小时前
[蓝桥杯]堆的计数
数据结构·c++·算法·蓝桥杯·动态规划
緈福的街口3 小时前
【leetcode】3. 无重复字符的最长子串
算法·leetcode·职场和发展