问题与解答

问题描述

对一棵完全二叉树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。

输入格式

输入有多组数据。

每组数据第一行输入一个结点数n(1<=n<=1000),第二行将树中的这n个节点依次输入(每个结点存储的数据是一个数字),n个结点编号方式是层间从上到下、层内从左到右依次编号;第三行输入一个d代表深度。

当n=0时,表示输入结束。

输出格式

每组数据在一行上输出该树中第d层的所有节点,节点间用空格隔开。每组数据输出完成后要换行。

样例输入

4

1 2 3 4

2

0

样例输出

2 3

样例说明

该完全二叉树的第一层是1,第二层是2 3,第三层是4;题目要求输出第二层,则输出2 3。

关键:由深度确定完全二叉树数组的下标

#include<stdio.h>
#include<math.h>
#define MaxNum 1010
int main()
{
int m,i,j,deep,deepest;
while(scanf("%d",&m)!=EOF && m) //多点测试输入
{
int T[MaxNum];
for(i=1; i<=m; i++)
scanf("%d",&T[i]);
scanf("%d",&deep);
deepest = (int)(log(m)/log(2))+1; //完全二叉树的深度:根节点为深度1
if(deep > deepest)
/*给定深度大于树的最大深度: 输出结点为空*/
printf("EMPTY\n");
else
if(deep == deepest)
{
/*给定深度等于树的最大深度: 输出最后一层结点*/
i = (int)pow(2,deep-1); //最后一层首元素的下标
for(i=i; i<=m; i++) //最后一层不一定满
printf("%d ",T[i]);
printf("\n"); //注意换行
}
else
{
/*给定深度小于树的最大深度: 输出中间某层结点*/
i = (int)pow(2, deep-1); //第deep层的首元素下标为i
j = (int)pow(2, deep)-1; //第deep层的末元素下标为j(对于完全二叉树来说中间层必定是满的)
for(i=i; i<=j; i++)
printf("%d ",T[i]);
printf("\n");
} }
}

<数据结构>XDOJ317.输出完全二叉树的某一层的更多相关文章

  1. BUAA_DS_北航数据结构:输出全排列

    输入一个数 \(n\),输出 \(1\sim n\) 的所有全排列,每个排列占一行,每个字符保留 \(5\) 个场宽.勤奋的同学一定已经开始打表了是吧. 说是能做肯定不是骗大家,那怎么做呢~ 其实回溯 ...

  2. 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点-----层序遍历的应用题

    题目:对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点:如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL:给出程序实现,并分析时间复杂度和空间复杂度. ...

  3. [Swift]LeetCode919. 完全二叉树插入器 | Complete Binary Tree Inserter

    A complete binary tree is a binary tree in which every level, except possibly the last, is completel ...

  4. LeetCode——919.完全二叉树插入器

    完全二叉树是每一层(除最后一层外)都是完全填充(即,结点数达到最大)的,并且所有的结点都尽可能地集中在左侧. 设计一个用完全二叉树初始化的数据结构 CBTInserter,它支持以下几种操作: CBT ...

  5. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  6. java数据结构-非线性结构之树

    一.树状图 树状图是一种数据结构,它是由n(n>=1)个有限节点组成的具有层次关系的集合.因其结构看起来想个倒挂的树,即根朝上,叶子在下,故被称为"树". 特点: 1. 每个 ...

  7. 深入浅出数据结构C语言版(15)——优先队列(堆)

    在普通队列中,元素出队的顺序是由元素入队时间决定的,也就是谁先入队,谁先出队.但是有时候我们希望有这样的一个队列:谁先入队不重要,重要的是谁的"优先级高",优先级越高越先出队.这样 ...

  8. java算法数据结构

    原文地址:github.com/kdn251/interviews 译文出自:掘金翻译计划 译者:王下邀月熊 校对者:PhxNirvana.根号三 这个 链接 用来查看本翻译与英文版是否有差别(如果你 ...

  9. 数据结构与算法—二叉排序树(java)

    前言 前面介绍学习的大多是线性表相关的内容,把指针搞懂后其实也没有什么难度.规则相对是简单的. 再数据结构中树.图才是数据结构标志性产物,(线性表大多都现成api可以使用),因为树的难度相比线性表大一 ...

随机推荐

  1. Oracle—表、约束、索引、表空间、分区、序列、统计信息

    表.约束.索引.表空间.分区.序列.统计信息 一.表及其操作 1.创建表 create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字段类型 默认值 是否为空, 字段名3 ...

  2. vue2 中的 export import

    vue中组件的引用嵌套通过export import语法链接 Nodejs中的 export import P1.js export default { name: 'P1' } index.js i ...

  3. my42_Mysql基于ROW格式的主从同步

    模拟主从update事务,从库跳过部分update事务后,再次开始同步的现象 主库 mysql> select * from dbamngdb.isNodeOK; +----+--------- ...

  4. 一、手把手教你docker搭建fastDFS文件上传下载服务器

    在搭建fastDFS文件上传下载服务器之前,你需要准备的有一个可连接的linux服务器,并且该linux服务器上已经安装了docker,若还有没安装docker的,先百度自行安装docker. 1.执 ...

  5. 【HarmonyOS】【xml】使用xml绘制视频播放控制栏

    本文记录HarmonyOS使用xml绘制视频播放控制栏 效果图如下 代码如下 点击查看代码 <?xml version="1.0" encoding="utf-8& ...

  6. 【kafka学习笔记】kafka的基本概念

    在了解了背景知识后,我们来整体看一下kafka的基本概念,这里不做深入讲解,只是初步了解一下. kafka的消息架构 注意这里不是设计的架构,只是为了方便理解,脑补的三层架构.从代码的实现来看,kaf ...

  7. 服务器安装Centos7

    目录 一.安装 一.安装 1.开启虚拟机后会出现以下界面 Install CentOS 7 安装CentOS 7 Test this media & install CentOS 7 测试安装 ...

  8. Python pyecharts绘制饼图

    一.pyecharts绘制饼图语法简介 饼图主要用于表现不同类目的数据在总和中的占比.每个的弧度不是数据量的占比pie.add()方法的用法add(name, attr, value, radius= ...

  9. 转置Table.Transpose(Power Query 之 M 语言)

    数据源: 任意五行两列 目标: 转置成两行五列 操作过程: [转换]>[转置] M公式:  = Table.Transpose( 表 )  

  10. Table.CombineColumns合并…Combine…(Power Query 之 M 语言)

    数据源: 任意表,表中列数超过两列 目标: 其中两列合并为一列 操作过程: 选取两列>[转换]>[合并列]>选取或输入分隔符>输入新列名>[确定]   M公式:  = T ...