/**
* 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) {}
* };
*/
#include <cstddef>
#include <queue>
class Solution {
public:
void connect(TreeLinkNode* root) {
if (root == nullptr)
return ;
queue<TreeLinkNode*> qu;
queue<TreeLinkNode*> jl;
qu.push(root);
bool hou = false;
while (qu.size() > 0 || jl.size() > 0) {
if (hou == false) {
TreeLinkNode* t;
t = qu.front();
qu.pop();
if (qu.size() == 0) {
t->next = nullptr;
hou = true;
} else
t->next = qu.front();
if (t->left != nullptr) {
jl.push(t->left);
}
if (t->right != nullptr) {
jl.push(t->right);
}
} else {
TreeLinkNode* t;
t = jl.front();
jl.pop();
if (jl.size() == 0) {
t->next = nullptr;
hou = false;
} else
t->next = jl.front();
if (t->left != nullptr) {
qu.push(t->left);
}
if (t->right != nullptr) {
qu.push(t->right);
}
}
}
}
};