/**
* 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 == NULL)
// return;
// // 左儿子的next等于right,右儿子的next:如果他的父节点的next不为空,右儿子的next等于父节点的next节点的左儿子,否则为空
// if (root->left)
// root->left->next = root->right,root->right->next = root->next != NULL ? root->next->left : NULL;
// connect(root->left);
// connect(root->right);
// }
// };
class Solution {
public:
void connect(TreeLinkNode *root) {
if (root == NULL)
return;
root->next = NULL;
TreeLinkNode *start = root, *cur;
// 用start记录每层的开始节点,然后一层一层遍历
while(start->left != NULL){
cur = start;
while(cur != NULL) cur->left->next = cur->right, cur->right->next = cur->next != NULL ? cur->next->left : NULL, cur = cur->next;
start = start->left;
}
}
};
static int x=[](){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();