解题思路:
层序遍历一般都是要使用queue辅助完成 :对于queue中的元素 ,依次获取节点( 记录当前层的size大小),把当前节点的值加入到当前层的vector 中 ,然后把子节点按序push到 队列中,重复这个步骤, 直到queue为空。
1.找到根节点push入队
2.在 1 的基础上遍历一层
3.在 2 的基础上遍历的同时向下遍历每个节点的子节点
4.在 3 的基础上,把遍历时遇到的子节点按左——>右的顺序保存起来
重复 1 ,直到在 3 里面没有子节点。
class Solution
{
public:
vector<vector<int>> levelOrder(Node* root)
{
queue<Node*> q;
if(root)
q.push(root);
vector<vector<int>> ret;
while(!q.empty())
{
//获取队列中的元素个数
size_t sz = q.size();
vector<int> temp;//获取这一行的val
while(sz--)
{
temp.push_back(q.front()->val);
//将下一行的Node入队
for(Node*& e : q.front()->children)
{
q.push(e);
}
q.pop();
}
ret.push_back(temp);
}
return ret;
}
};