LeetCode/116. 填充每个节点的下一个右侧节点指针
116. 填充每个节点的下一个右侧节点指针
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
1 | struct Node { |
填充它的每个 next指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next指针设置为 NULL。
初始状态下,所有 next指针都被设置为 NULL。
示例:

1 | 输入:{"$id":"1","left":{"$id":"2","left":{"$id":"3","left":null,"next":null,"right":null,"val":4},"next":null,"right":{"$id":"4","left":null,"next":null,"right":null,"val":5},"val":2},"next":null,"right":{"$id":"5","left":{"$id":"6","left":null,"next":null,"right":null,"val":6},"next":null,"right":{"$id":"7","left":null,"next":null,"right":null,"val":7},"val":3},"val":1} |
提示:
- 你只能使用常量级额外空间。
- 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题解:
本题想法很简单,就是将左结点的next与右结点相连即可,但是有一种情况我们需要考虑,就是不同父结点的两个结点怎么连接的问题,这时其实就是让左父结点的右孩子结点连接右父结点的左孩子结点连接即可。我们可以用前序遍历的思想来做。
具体代码如下:
1 | /* |
还有一种方法可以进一步压缩时间复杂度,和上面的思路大同小异,直接看代码
具体代码如下:
1 | /* |
另一种方法很直观就能想到,每一层的各个左结点和右结点连接,其实就是层序遍历。
具体代码如下:
1 | /* |

