-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLCProblem116.cpp
More file actions
56 lines (48 loc) · 1.8 KB
/
LCProblem116.cpp
File metadata and controls
56 lines (48 loc) · 1.8 KB
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
/*
116. Populating Next Right Pointers in Each Node
Medium
You are given a perfect binary tree where all leaves are on the same level, and every parent has two children. The binary tree has the following definition:
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.
Initially, all next pointers are set to NULL.
Not my solution, but I understand it.
*/
/*
// Definition for a Node.
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) {}
};
*/
class Solution {
public:
Node* connect(Node* root) {
if(!root) return nullptr;
queue<Node*> q;
q.push(root);
while(size(q)) {
Node* rightNode = nullptr; // set rightNode to null initially
for(int i = size(q); i; i--) { // traversing each level
auto cur = q.front(); q.pop(); // pop a node from current level and,
cur -> next = rightNode; // set its next pointer to rightNode
rightNode = cur; // update rightNode as cur for next iteration
if(cur -> right) // if a child exists
q.push(cur -> right), // IMP: push right first to do right-to-left BFS
q.push(cur -> left); // then push left
}
}
return root;
}
};