1.题目
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
2.思路分析
- 广度优先遍历
- 利用queue的特性,将节点一个一个的入队列
- 只有当队列空的时候,才表示循环结束
- 用什么来表示每层的个数,然后想到,其实每层的节点,我们每次不都入队列了吗?
- 那就直接q.size() 就知道每层的节点的个数,然后将节点放在一个临时的vector中,最后push_back到ret中
3.代码展示
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ret;
if(!root)
return ret;
queue<TreeNode*> q;
q.push(root);
while(!q.empty())
{
int cursize = q.size();
vector<int> temp;
for(int i = 0; i < cursize; ++i){
auto top = q.front();
q.pop();
if(top->left) q.push(top->left);
if(top->right) q.push(top->right);
temp.push_back(top->val);
}
ret.push_back(temp);
}
return ret;
}
};