题目:102. 二叉树的层序遍历 - 力扣(LeetCode)
如果返回结果是一个vector<int>,这样会很简单,只需要将根节点入队列,循环取队头元素,队头元素出队,取得同时将其左右子树不为空的节点入队即可,但是这个题目的返回值时vector<vector<int>>,这就意味着我们要考虑一个节点在树中的哪一层。
解决思路:
首先将根节点入队,然后开始循环,访问根节点,根节点出队,同时左右孩子入队,这样此时队列中的元素全部都处于树的同一层,我们只需要记录此时队列大小,就可以访问同一层的数据,即使后续队列有进队操作,也不会对我们造成影响。
代码:
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ret;
queue<TreeNode*> q;
if(root)
q.push(root);
while(!q.empty()){
vector<int> v;
for(int i = q.size();i > 0; --i){
root = q.front();
q.pop();
v.push_back(root->val);
if(root->left)
q.push(root->left);
if(root->right)
q.push(root->right);
}
ret.push_back(v);
}
return ret;
}
};