这道题目要求我们输出各层和最大的层数。
比如下面这棵二叉树,第二层的值最大,结果输出2
题目给的数据范围最大为10^5,因此这道题我们的算法时间复杂度不可以超过O(n^2),最好弄个O(n)或者O(nlongn).
第一层有1个数,第二层有两个数,第三层有四个数,第四层应该有8个数,第五层应该有16个数。
我们可以通过这个规律来求出每层的值:
每一层起点 我们观察发现每层起点和每层层数之间的关系,规律如下:
第一层起点为1,之后每层起点=每层层数*2。
int d=层数。 int i=1,i=d*2;
每一层的长度
我们可以观察每一层长度和每一层起点,层数的关系,得出如下规律
每一层长度=起点^层数-1
可以用位运算表示为 i+<<d-1
伪代码
Code