0%

116. Populating Next Right Pointers in Each Node

O(n) time O(1) space

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
/*
// 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) {
Node dummy, *p = &dummy, *res = root;
while (root) {
if (root->left) {
p->next = root->left;
root->left->next = root->right;
p = root->right;
}
root = root->next;
if (!root) {
root = dummy.next;
dummy.next = nullptr;
p = &dummy;
}
}
return res;
}
};

直接用117. Populating Next Right Pointers in Each Node II的方法也行

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
/*
// 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) {
Node dummy, *p = &dummy, *res = root;
while (root) {
if (root->left) {
p->next = root->left;
p = p->next;
}
if (root->right) {
p->next = root->right;
p = p->next;
}
root = root->next;
if (!root) {
root = dummy.next;
dummy.next = nullptr;
p = &dummy;
}
}
return res;
}
};

O(n) time O(h) space

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
/*
// Definition for a Node.
class Node {
public:
int val;
Node* left;
Node* right;
Node* next;

Node() {}

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 root;
Node dummy_head, *tail = &dummy_head;
for (auto p = root; p; p = p->next) {
if (p->left) {
tail->next = p->left;
tail = tail->next;
}
if (tail->next) break;
if (p->right) {
tail->next = p->right;
tail = tail->next;
}
if (tail->next) break;
}
connect(root->right);
connect(root->left);
return root;
}
};