题目链接:
![](https://img-blog.csdnimg.cn/img_convert/1e273c71adbe418e9a13f1cc49663390.png)
![](https://img-blog.csdnimg.cn/img_convert/2f0e4cdca13f463a90a6dcb86b46e60e.png)
思路
我们可以借用队列先进先出的特性,将各层节点入到队列中去,每出一个节点,将其左右节点带入。
代码实现
注意几点:
队列中存的是二叉树节点的地址,出队列不会销毁二叉树的节点。
size记录的是该层节点的个数,vec将每一层节点放进去,最后一层while循环结束后,再将vec放入其中。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> q;
vector<vector<int>> vv;
if (root)
{
q.push(root);
}
while (!q.empty())
{
int size = q.size();
vector<int> vec;
while (size--)
{
TreeNode* tmp = q.front();
q.pop();
vec.push_back(tmp->val);
if (tmp->left)
q.push(tmp->left);
if (tmp->right)
q.push(tmp->right);
}
vv.push_back(vec);// 尾插一个vector<int>类型的vec,vec记录的是一层的节点。
}
return vv;
}
};