3. 二叉哥的二叉树
题目描述
传说计算机学院有一位前辈叫做二叉哥,他十八般算法样样精通。他当年在程设的时候由于二叉树一举成名。大家为了纪念这一事件,尊称他为二叉哥!二叉树是一个什么样的东西呢?现在我们就来揭开二叉哥的二叉树的神秘面纱吧!
下图就是一棵有着9个节点的二叉树。顾名思义,二叉树就像一棵倒着生长的树,每个分叉点可以分出去两个枝条。我们把分叉点叫做"节点”,因为每个分叉点最多可以分出去两个枝条,所以就叫做"二叉”树。最顶层只有一个节点,我们把它叫做根节点。下图中,标号为1的节点就是根节点,它有两个孩子:节点2和节点3。节点2只有一个孩子,标号为4,而节点3有两个孩子,标号分别为5和6。下图中的二叉树第3层有3个节点,分别是7、8和9号节点。
二叉哥对于二叉树的掌握已经到了出神入化的程度,为了维护他的二叉树霸主地位,他准备了2^2^2^2^2个问题来迎接挑战者,现在我们来看下第0道吧。
一个有n个节点的二叉树的第m层至多有多少个节点?
输入
输入的第一行为一个数字T(1 <= T <= 10000),表示有T组数据。
接下来的T行每行有两个数字n和m(0 <= n, m <= 10^8),表示二叉树有n个节点,求m层最多有多少个节点。
根节点所在的为第0层。
输出
每个用例输出一个数字,表示最多的节点个数。
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
int n, m;
int list[40];
int result;
void build(int n, int m){if(n == 0){return;}if(m == 0){if(n>0){result++;}return;}if(n >= list[m]+1){result += list[m];return;}int maxd = (int)(log(n+1)/log(2))-1;while(maxd > m||n-list[maxd+1]+1 < m-maxd){maxd--;if(maxd < 0) return;}result += list[maxd];if(maxd == m) return;build(n-list[maxd+1]+1-m+maxd, maxd);
}int main(){list[0] = 1;for(int i = 1; i < 40; i++){list[i] = list[i-1]*2;}int T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);result = 0;build(n, m);printf("%d\n",result);}return 0;
}
3. 二叉哥的二叉树相关推荐
- 3006基于二叉链表的二叉树最长路径的求解(附思路)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为 ...
- 3010基于二叉链表的二叉树高度的计算(附思路,WA的一种可能情况及代码)
基于二叉链表的二叉树高度的计算 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为 ...
- 3010基于二叉链表的二叉树高度的计算
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...
- 3003基于二叉链表的二叉树左右子树的交换
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为空) ...
- 【数据结构】基于二叉链表的二叉树结点个数的统计
基于二叉链表的二叉树结点个数的统计 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数 ...
- 基于二叉链表的二叉树高度的计算
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...
- pta 是否完全二叉搜索树_二叉树:构造一棵搜索树
给「代码随想录」一个星标吧! ❝ 构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指 ...
- 3005-基于二叉链表的二叉树最大宽度的计算(附思路,注释,可能错误分析)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法计算该二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值). 输入 多组数据.每组数据一行,为二叉树 ...
- 3007基于二叉链表的二叉树叶子结点到根结点的路径的求解(附DFS在树里的应用分析,思路详解)
以下代码用到的前置知识:DFS算法 可以看这个视频~只用看这个就能懂了~ DFS深搜解决迷宫问题(原理分析+代码实现)_哔哩哔哩_bilibilihttps://www.bilibili.com/vi ...
- 3004基于二叉链表的二叉树的双序遍历(附题意解释)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次 ...
最新文章
- 我在 CMU 的八年博士生涯...........
- 初学Java--计算器
- 搞定Go单元测试(三)—— 断言(testify)
- jquery-data的三种用法
- centOS 6.0无法运行dump指令的解决方法
- STM32 - 定时器的设定 - 基础- 07 - 6-step PWM generation - 6步长PWM的产生 - COM Event的解释
- mybatis、mybatisplus的常用操作
- mysql resultset null_com.mysql.jdbc.driver中resultset报NullException
- Oracle输入默认密码错误,oracle中默认账号oracle 11g SQL plus软件怎么打开?打开显示密码错误怎么办?...
- 使用visual studio code 编写小程序代码
- Java微信支付APIV3密钥生成全过程
- ufw防火墙配置命令
- html5全栈工程师招聘,蓝鸥HTML5全栈工程师 高薪就业的利器
- jsp中空格字符怎么写_jsp多个空格符号怎么打
- element -ui如何去掉原来的蓝色下划线
- 隐私权斗士库克:出身平凡 从小喜欢伸张正义
- 服务器网站内容被阻止,关于安全狗提示“您请求的页面包含一些不合理的内容,已被网站管理员设置拦截”的解决方法...
- 设计100倍同向放大电路
- thinkphp + 腾讯云名片识别
- ui设计为什么要切图,切图是什么意思?
热门文章
- php经典实例博客管理,PHP经典项目案例-(一)博客管理系统2
- Uri.parse()的各种用法
- Android权限Uri.parse的详细资料
- 【点宽专栏】研报复现——跨期价差分析与跨期套利研究
- java oa系统二次开发_浅谈OA系统的二次开发
- 乌镇世界互联网大会上,百度敲响了创新动能的“牛顿摆”
- python计算样本方差_Python numpy 样本方差估计
- Aras Innovator-学-习-之-旅-
- 使用dd命令完整拷贝系统分区到另外一个硬盘上
- 【Angular中的RxJS】- Subject 分类介绍