题目描述

传说计算机学院有一位前辈叫做二叉哥,他十八般算法样样精通。他当年在程设的时候由于二叉树一举成名。大家为了纪念这一事件,尊称他为二叉哥!二叉树是一个什么样的东西呢?现在我们就来揭开二叉哥的二叉树的神秘面纱吧!

下图就是一棵有着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. 二叉哥的二叉树相关推荐

  1. 3006基于二叉链表的二叉树最长路径的求解(附思路)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为 ...

  2. 3010基于二叉链表的二叉树高度的计算(附思路,WA的一种可能情况及代码)

    基于二叉链表的二叉树高度的计算 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为 ...

  3. 3010基于二叉链表的二叉树高度的计算

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...

  4. 3003基于二叉链表的二叉树左右子树的交换

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为空) ...

  5. 【数据结构】基于二叉链表的二叉树结点个数的统计

    基于二叉链表的二叉树结点个数的统计 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数 ...

  6. 基于二叉链表的二叉树高度的计算

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...

  7. pta 是否完全二叉搜索树_二叉树:构造一棵搜索树

    给「代码随想录」一个星标吧! ❝ 构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指 ...

  8. 3005-基于二叉链表的二叉树最大宽度的计算(附思路,注释,可能错误分析)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法计算该二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值). 输入 多组数据.每组数据一行,为二叉树 ...

  9. 3007基于二叉链表的二叉树叶子结点到根结点的路径的求解(附DFS在树里的应用分析,思路详解)

    以下代码用到的前置知识:DFS算法 可以看这个视频~只用看这个就能懂了~ DFS深搜解决迷宫问题(原理分析+代码实现)_哔哩哔哩_bilibilihttps://www.bilibili.com/vi ...

  10. 3004基于二叉链表的二叉树的双序遍历(附题意解释)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次 ...

最新文章

  1. 我在 CMU 的八年博士生涯...........
  2. 初学Java--计算器
  3. 搞定Go单元测试(三)—— 断言(testify)
  4. jquery-data的三种用法
  5. centOS 6.0无法运行dump指令的解决方法
  6. STM32 - 定时器的设定 - 基础- 07 - 6-step PWM generation - 6步长PWM的产生 - COM Event的解释
  7. mybatis、mybatisplus的常用操作
  8. mysql resultset null_com.mysql.jdbc.driver中resultset报NullException
  9. Oracle输入默认密码错误,oracle中默认账号oracle 11g SQL plus软件怎么打开?打开显示密码错误怎么办?...
  10. 使用visual studio code 编写小程序代码
  11. Java微信支付APIV3密钥生成全过程
  12. ufw防火墙配置命令
  13. html5全栈工程师招聘,蓝鸥HTML5全栈工程师 高薪就业的利器
  14. jsp中空格字符怎么写_jsp多个空格符号怎么打
  15. element -ui如何去掉原来的蓝色下划线
  16. 隐私权斗士库克:出身平凡 从小喜欢伸张正义
  17. 服务器网站内容被阻止,关于安全狗提示“您请求的页面包含一些不合理的内容,已被网站管理员设置拦截”的解决方法...
  18. 设计100倍同向放大电路
  19. thinkphp + 腾讯云名片识别
  20. ui设计为什么要切图,切图是什么意思?

热门文章

  1. php经典实例博客管理,PHP经典项目案例-(一)博客管理系统2
  2. Uri.parse()的各种用法
  3. Android权限Uri.parse的详细资料
  4. 【点宽专栏】研报复现——跨期价差分析与跨期套利研究
  5. java oa系统二次开发_浅谈OA系统的二次开发
  6. 乌镇世界互联网大会上,百度敲响了创新动能的“牛顿摆”
  7. python计算样本方差_Python numpy 样本方差估计
  8. Aras Innovator-学-习-之-旅-
  9. 使用dd命令完整拷贝系统分区到另外一个硬盘上
  10. 【Angular中的RxJS】- Subject 分类介绍