刚开始,我这个题想用递归。但是递归不满足要求(使用线性的额外空间)。所以就不用递归。.
我们可以这样考虑,用两个指针,假设为m和n。可以借鉴层序遍历的思想,我们添加next指针是完成一层厚进行下一层。那么我们就令m来指向每一层的左侧第一个元素,然后让n从左侧第一个元素一直往右进行处理。实际上,我们m和n在第i行的时候,操作的元素是第i+1行,所以当我们操作i+1行的时候,就可以用next指针实现n往右移动了。
所以思路就可以这样:
在完成对1的连接之后,n就可以向右移动,对第二个结点进行相同的操作了。所以这个可以写成一个while循环。
当然,为了鲁棒性,开头别忘了一句话检测root是否为空,为空就返回。
下面是实现代码,其中left_point就是上面的m,flag就是上面的n。