22、II. 从上到下打印二叉树 II
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3 / \ 9 20 / \ 15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
提示:
节点总数 <= 1000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof
思路:
层次遍历思路,用队列实现。获取当前队头,然后向左右子树扩散,只要不空都可以入队。注意的是我们在遍历层次的时候,题目要求是一层一个数组记录。我们这时候是需要另外一个循环的。
图解:
代码实现:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
queue<TreeNode*> q;
if(!root) return res;
//将root放进队头
q.push(root);
while(q.size()) //只要队列不空
{
vector<int> level; //按照题目存数据
int len = q.size(); //因为每层都要用数组表示,我们需要知道当前队列里面的元素有多少个
while(len -- ) //将当前层数的数据存下来
{
//取出队头
auto t = q.front();
q.pop();
//按层次遍历存数据
level.push_back(t->val);
//扩展队头
if(t->left) q.push(t->left);
if(t->right) q.push(t->right);
}
res.push_back(level); //答案存储
}
return res;
}
};