
一、题目描述

二、算法原理
思路:队列 + 层序遍历

1)一开始先把根节点入队列
2)我们使用一个变量 num 来记录每层的数据个数,因为我们把每层的数据放到一个二维数组里面,所以我们还需要一个一维数组来记录当前层的数据。
3)我们把根据每层的数据的个数,一一出队列,出队列的值放到一维数组里面去,每次出一个节点都要把他的字节点入队列;
4)当遍历完当前层之后让这个一维数组入到二维数组里面去。重复上面的操作直到这个队列为空,队列为空 = 遍历完整颗树;
三、代码实现
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) {
if(root == nullptr) return {};
queue<Node*> _queue;
_queue.push(root);//先让根节点入队列
vector<vector<int>> ret;//最终的结果
while(!_queue.empty())
{
vector<int> tmp;//临时存储,记录当前层的数据
int num = _queue.size();//记录出队列的个数 = 当前层数据的个数
while(num--)
{
Node* node = _queue.front();//获取队列头的节点
_queue.pop();//删除队头的节点
tmp.push_back(node->val);
for(auto& e : node->children) if(e != nullptr) _queue.push(e);
}
ret.push_back(tmp);
}
return ret;
}
};