1public Node connect(Node root) {
2 if (root == null) {
3 return root;
4 }
5
6 Queue<Node> queue = new LinkedList<>();
7 queue.offer(root);
8 int level = 0;
9
10 while (!queue.isEmpty()) {
11 int levelSize = queue.size();
12
13 for (int i = 0; i < levelSize; i++) {
14 Node current = queue.poll();
15
16 // Connect to next node in level
17 if (i < levelSize - 1) {
18 current.next = queue.peek();
19 }
20
21 // Add children to queue
22 if (current.left != null) {
23 queue.offer(current.left);
24 }
25 if (current.right != null) {
26 queue.offer(current.right);
27 }
28 }
29
30 level++;
31 }
32
33 return root;
34}