层次遍历并按每一层输出,需要在队列的基础上将每一层进行划分,则可以通过队列的长度n得知每一层节点的个数,从而进行第二个循环,进行n次循环,将一层中每一个节点的左右子树push进队列中,并将每个节点的valuepush进vector中,这样内层循环结束后队列中只剩下下一层的所有节点并且获得了本层的所有value的vector。
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
if(root == NULL)return res;
int level = 0;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
int n = q.size();
vector<int> cur_vec;
for(int i=0;i<n;i++){
TreeNode* t = q.front();q.pop();
cur_vec.push_back(t->val);
if(t->left!=NULL)q.push(t->left);
if(t->right!=NULL)q.push(t->right);
}
res.push_back(cur_vec);
}
return res;
}