acwing第十届蓝桥杯B组1240.完全二叉树的权值

97 阅读1分钟

image.png image.png 这道题目要求我们输出各层和最大的层数。 比如下面这棵二叉树,第二层的值最大,结果输出2

image.png

题目给的数据范围最大为10^5,因此这道题我们的算法时间复杂度不可以超过O(n^2),最好弄个O(n)或者O(nlongn).

第一层有1个数,第二层有两个数,第三层有四个数,第四层应该有8个数,第五层应该有16个数。 我们可以通过这个规律来求出每层的值: image.png

每一层起点 我们观察发现每层起点和每层层数之间的关系,规律如下:

第一层起点为1,之后每层起点=每层层数*2。

int d=层数。 int i=1,i=d*2;

image.png

每一层的长度

我们可以观察每一层长度和每一层起点,层数的关系,得出如下规律

每一层长度=起点^层数-1

可以用位运算表示为 i+<<d-1

伪代码

image.png

Code

image.png