给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:

1
2
3
4
5
6
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。

初始状态下,所有 next 指针都被设置为 NULL。

思路

  1. 层次遍历进而填充 next
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var connect = function (root) {
if (!root) {
return root
}
let curNodes = [root]
while (curNodes.length > 0) {
for (let i = 1; i < curNodes.length; ++i) {
curNodes[i - 1].next = curNodes[i]
}
const nextNodes = []
for (const node of curNodes) {
if (node.left) {
nextNodes.push(node.left)
}
if (node.right) {
nextNodes.push(node.right)
}
}
curNodes = nextNodes
}
return root
}