一、题目描述


二、解题思路
整体思路
可以借助队列来完成n叉树的层序遍历,由于需要返回一个二维数组,所以需要在每次处理队列中的节点之前进行计数。
具体思路
(1)首先进行变量的初始化,ret用于承接最终的返回值,如果root==nullptr,就返回ret;
(2)将root加入Q,当Q不为空时,进行循环:
<1>首先,统计本层的节点数,size=Q.size(),向量current用于承接当前层的序列;
<2>遍历当前层的节点,将当前节点弹出,并将其子节点加入队列;
<3>遍历完当前层后,将current加入ret;
(3)Q为空后,ret即为所求,返回即可。
三、代码实现
cpp
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) {
val = _val;
}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
//队列
queue<Node*> Q;
vector<vector<int>> ret;
if(root==nullptr) return ret;
Q.push(root);
while(Q.size()){
//先求出本层元素的个数
int size=Q.size();
vector<int> current;
for(int i=0;i!=size;i++){
Node* t=Q.front();
Q.pop();
current.push_back(t->val);
for(Node* child:t->children){
if(child!=nullptr)
Q.push(child);
}
}
ret.push_back(current);
}
return ret;
}
};