Node* connect(Node* root) {
if(root==NULL){
return root;
}
queue<Node*> q;
q.push(root);
while(!q.empty()){
int size=q.size();
for(int i=0;i<size;i++){
Node* n=q.front();
q.pop();
// 连接
if (i < size - 1) {
n->next = q.front();
}
// 添加新节点
if (n->left != nullptr) {
q.push(n->left);
}
if (n->right != nullptr) {
q.push(n->right);
}
}
}
return root;
}
## 层次遍历输出节点值,看成BFS
```c++
queue<TreeNode*> q;
vector<int> ans;
vector<int> levelOrder(TreeNode* root) {
if(root == NULL){
return ans;
}
q.push(root);
while(!q.empty()){
TreeNode* curr=q.front();
q.pop();
ans.push_back(curr->val);
// cout<<curr->val<<" ";
if(curr->left != NULL){
q.push(curr->left);
}
if(curr->right != NULL){
q.push(curr->right);
}
}
return ans;
}
每一层分别输出,每次记录层的数量
vector<vector<int>> ans;
vector<vector<int>> levelOrder(TreeNode* root) {
if(root == NULL){
return ans;
}
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
int levelLen=q.size();
cout<<levelLen<<" ";
vector<int> v;
//每次记录当前层长度进行遍历
for(int i=0;i<levelLen;i++){
TreeNode* curr=q.front();
if(curr->left != NULL){
q.push(curr->left);
}
if(curr->right != NULL){
q.push(curr->right);
}
v.push_back(curr->val);
q.pop();
}
ans.push_back(v);
}
return ans;
}