题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路
二叉树的层序遍历进阶版
基础版:二叉树的层序遍历,一个数组输出,不用记录当前层有没有遍历完
基础版层序遍历
进阶版:本题,要记录当前层有没有遍历完
进阶版plus:按之字形打印,不但要记录当前层有没有遍历完,还要记录当前遍历的层数
之字形层序遍历
实现:
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
if (!pRoot) return {};
vector<vector<int>> ret;
queue<TreeNode*> q;
q.push(pRoot);
while (!q.empty())
{
int s=q.size();//记录当前层的结点数量
vector<int> temp;
while (s)//例如1层就是1,循环一次就结束一下,这时队列剩下的是当前层上结点的子节点了
{
temp.push_back(q.front()->val);
if (q.front()->left) q.push(q.front()->left);
if (q.front()->right) q.push(q.front()->right);
q.pop();
s--;
}
ret.push_back(temp);
}
return ret;
}
};