LeetCode 117. 填充每个节点的下一个右侧节点指针 II
题目描述
思路分析
解法一:层序遍历指针连接(推荐)
核心思路:
- 使用当前层的
next指针遍历节点,不额外使用队列。- 通过虚拟头结点
dummy和尾指针tail将下一层节点串起来。- 每处理完一层后,跳到
dummy.next作为下一层起点。
复杂度分析:
- 时间复杂度:O(n),其中 n 表示节点数量。
- 空间复杂度:O(1),不计递归栈和输出结构。
class Solution {
public Node connect(Node root) {
Node cur = root;
while (cur != null) {
Node dummy = new Node(0);
Node tail = dummy;
for (Node node = cur; node != null; node = node.next) {
if (node.left != null) {
// 连接下一层的左子节点
tail.next = node.left;
tail = tail.next;
}
if (node.right != null) {
// 连接下一层的右子节点
tail.next = node.right;
tail = tail.next;
}
}
cur = dummy.next;
}
return root;
}
}
func connect(root *Node) *Node {
cur := root
for cur != nil {
dummy := &Node{}
tail := dummy
for node := cur; node != nil; node = node.Next {
if node.Left != nil {
// 连接下一层的左子节点
tail.Next = node.Left
tail = tail.Next
}
if node.Right != nil {
// 连接下一层的右子节点
tail.Next = node.Right
tail = tail.Next
}
}
cur = dummy.Next
}
return root
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 116. 填充每个节点的下一个右侧节点指针 | 中等 | 层序遍历 |
| 102. 二叉树的层序遍历 | 中等 | 层序遍历 |
| 103. 二叉树的锯齿形层序遍历 | 中等 | 层序遍历 |
| 199. 二叉树的右视图 | 中等 | 层序遍历 |
| 117. 填充每个节点的下一个右侧节点指针 II | 中等 | 层序遍历 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!