/**
* Definition for binary tree with next pointer.
* struct TreeLinkNode {
* int val;
* TreeLinkNode *left, *right, *next;
* TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
* };
*/
class Solution {
public:
void connect(TreeLinkNode* root) {
if (root == nullptr) return;
vector<TreeLinkNode*> arr;
arr.insert(arr.begin(), root);
while (!arr.empty()) {
int n = arr.size();
for (int i = 0; i < n - 1; i++) {
arr[i]->next = arr[i + 1];
}
arr[n - 1]->next = nullptr;
for (int i = 0; i < n; i++) {
TreeLinkNode* node = *arr.begin();
arr.erase(arr.begin());
if (node->left) arr.push_back(node->left);
if (node->right) arr.push_back(node->right);
}
}
}
};