Cover image for Interview Classic 150 Questions P117 Populating Next Right Pointers in Each Node II

Interview Classic 150 Questions P117 Populating Next Right Pointers in Each Node II


Timeline

timeline

2025-10-26

init

level order traversal

Title:

Just level order traversal

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
// Definition for a Node.
*/
#include <cstddef>
class Node {
public:
int val;
Node *left;
Node *right;
Node *next;

Node()
: val(0)
, left(NULL)
, right(NULL)
, next(NULL)
{
}

Node(int _val)
: val(_val)
, left(NULL)
, right(NULL)
, next(NULL)
{
}

Node(int _val, Node *_left, Node *_right, Node *_next)
: val(_val)
, left(_left)
, right(_right)
, next(_next)
{
}
};

#include <queue>
using std::queue;

class Solution {
public:
Node *connect(Node *root)
{
if (root == nullptr) {
return root;
}
// level order traversal
int i, n;
Node *curr, *last;
queue<Node *> que;

que.push(root);

while (!que.empty()) {
n = que.size();
last = nullptr;
for (i = 0; i < n; i++) {
curr = que.front();
que.pop();
if (last != nullptr)
last->next = curr;

if (curr->left != nullptr)
que.push(curr->left);

if (curr->right != nullptr) {
que.push(curr->right);
}

last = curr;
}
curr->next = nullptr;
}
return root;
}
};