
一、前言
本系列文章为《剑指Offer》刷题笔记。
刷题平台:牛客网
书籍下载:共享资源
二、题目
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
1、思路
这道题比上一道题《剑指Offer(五十九):按之字顺序打印二叉树》简单一些,牛客网将这两道题应该是放错顺序了。
思路和上一道题一样,区别在于,这把是先入先出,使用队列即可。
2、代码
C++:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > result;
if(pRoot == NULL){
return result;
}
queue<TreeNode* > nodes[2];
nodes[0].push(pRoot);
while(!nodes[0].empty() || !nodes[1].empty()){
vector<int> v[2];
while(!nodes[0].empty()){
v[0].push_back(nodes[0].front()->val);
if(nodes[0].front()->left != NULL){
nodes[1].push(nodes[0].front()->left);
}
if(nodes[0].front()->right != NULL){
nodes[1].push(nodes[0].front()->right);
}
nodes[0].pop();
}
if(!v[0].empty()){
result.push_back(v[0]);
}
while(!nodes[1].empty()){
v[1].push_back(nodes[1].front()->val);
if(nodes[1].front()->left != NULL){
nodes[0].push(nodes[1].front()->left);
}
if(nodes[1].front()->right != NULL){
nodes[0].push(nodes[1].front()->right);
}
nodes[1].pop();
}
if(!v[1].empty()){
result.push_back(v[1]);
}
}
return result;
}
};
来源:
https://cuijiahua.com/blog/2018/01/basis_60.html
