【九度OJ】题目1176:树查找 解题报告

标签(空格分隔): 九度OJ


http://ac.jobdu.com/problem.php?pid=1176

题目描述:

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

输入:

输入有多组数据。
每组输入一个n(1<=n<=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。

输出:

输出该树中第d层得所有节点,节点间用空格隔开,最后一个节点后没有空格。

样例输入:

4
1 2 3 4
2

样例输出:

2 3

Ways

二叉树的性质。

首先考虑,这是要输出某一层的所有元素,那么这一层是否存在?再其次,这一层是完全的吗,是否有空的节点。

我们知道,每一层的叶子节点的最左边的元素是2^(deep -1),最右节点元素是2^deep-1,所以我可以根据这个判断deep和总数n之间的关系。

只要所求deep层的pow(2, deep - 1) <= n,那么此层必不为空。然后遍历该层,如果当前节点的下一个节点是0,说明下一个节点已经不存在了,那么,应该输出当前值,不空格,要换行;否则说明右边还有元素,再判断是否是最后元素,即是否满足i == pow(2, deep) - 1,同理判断是否留空格和换行。

因为二叉树的叶子记数是从1开始的,所以我在往数组里插入数字,以及读出的时候也是从1开始,不符合平时的数组习惯,注意不要出现问题。

#include <stdio.h>
#include <math.h> int main() { int n;
int tree[1002];
int deep; while (scanf("%d", &n) != EOF) {
for (int i = 1; i <= n; i++) {
scanf("%d", &tree[i]);
}
scanf("%d", &deep);
if (pow(2, deep - 1) <= n) {
for (int i = (int) pow(2, deep - 1);
i < pow(2, deep); i++) {
if (tree[i + 1] == 0) {
printf("%d\n", tree[i]);
break;
} else {
if (i == pow(2, deep) - 1)
printf("%d\n", tree[i]);
else
printf("%d ", tree[i]);
}
}
} else {
printf("EMPTY\n");
} }
return 0;
}

二刷这个题的时候,思路更加清晰了:计算出这一层的左右节点的“序号”,判断与n的关系即可。注意题目中的数的节点里面放的数据不一定是连续的,否则也就没有输入的意义了。

注意i是逻辑上的序号,tree[i]是具体的节点放的内容。

#include<stdio.h>
#include<math.h> int main() {
int n, d;
int tree[1002];
while (scanf("%d", &n) != EOF) {
for (int i = 1; i <= n; i++) {
scanf("%d", &tree[i]);
}
scanf("%d", &d);
int left = (int) pow(2, d - 1);
int right = (int) pow(2, d) - 1;
if (left > tree[n]) {
printf("EMPTY\n");
}
bool isFirst = true;
for (int i = left; i <= n && i <= right; i++) {
if (isFirst) {
printf("%d", tree[i]);
isFirst = false;
} else {
printf(" %d", tree[i]);
} }
printf("\n");
} return 0;
}

Date

2017 年 3 月 4 日

【九度OJ】题目1176:树查找 解题报告的更多相关文章

  1. 九度oj 题目1173:查找

    题目描述: 输入数组长度 n 输入数组      a[1...n] 输入查找个数m 输入查找数字b[1...m]  输出 YES or NO  查找有则YES 否则NO . 输入: 输入有多组数据. ...

  2. 九度oj 题目1177:查找

    题目描述: 读入一组字符串(待操作的),再读入一个int n记录记下来有几条命令,总共有2中命令:1.翻转  从下标为i的字符开始到i+len-1之间的字符串倒序:2.替换  命中如果第一位为1,用命 ...

  3. 【九度OJ】题目1173:查找 解题报告

    [九度OJ]题目1173:查找 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1173 题目描述: 输入数组长度 ...

  4. 【九度OJ】题目1177:查找 解题报告

    [九度OJ]题目1177:查找 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1177 题目描述: 读入一组字符串(待操作的),再读入 ...

  5. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  6. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  7. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  8. 九度oj 题目1007:奥运排序问题

    九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...

  9. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...

随机推荐

  1. R语言与医学统计图形【3】条形图、误差图

    R语言基础绘图系统 基础图形--条形图.误差图 3.条形图 barplot接收的数据是矩阵而非数据框. data <- sample(c(50:80),5) barplot(data,col=h ...

  2. 7 — 简单了解springboot中的thymeleaf

    1.官网学习地址 https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html 2.什么是thymeleaf? 一张图看明白: 解读: ...

  3. C语言中的各种字符串输入方法

    C语言从stdin读取一行字符串的几种方法 gets gets函数的头文件是<stdio.h>,原型如下: char *gets(char *s); gets从stdin中读入一行内容到s ...

  4. 【Maven实战技巧】「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架

    技术推荐 自定义Archetype Maven骨架/以当前项目为模板创建maven骨架,可以参考http://maven.apache.org/archetype/maven-archetype-pl ...

  5. 如何将List集合中相同属性的对象合并

    在实际的业务处理中,我们经常会碰到需要合并同一个集合内相同属性对象的情况,比如,同一个用户短时间内下的订单,我们需要将各个订单的金额合并成一个总金额.那么用lambda表达式和HashMap怎么分别处 ...

  6. 一份不错的Java就业指导

    想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢? 本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西,你可以把这些 ...

  7. UNIX基本命令

    ### 1. 必学命令 help [子命令] : 查看某一个具体的子命令的使用方法### 2. 常用命令 - cd path : 将当前路径切换到path路径 - pwd : 查看当前所在路径 - l ...

  8. AOP中环绕通知的书写和配置

    package com.hope.utils;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotatio ...

  9. 拷贝txt文本中的某行的数据到excel中

    package com.hope.day01;import java.io.*;import java.util.ArrayList;public class HelloWorld {    publ ...

  10. 【力扣】337. 打家劫舍 III

    在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称之为"根". 除了"根"之外,每栋房子有且只有一个" ...