一、前言
本系列文章为《剑指Offer》刷题笔记。
刷题平台:牛客网
书籍下载:共享资源
二、题目
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
1、思路
这道题比上一道题《剑指Offer(五十九):按之字顺序打印二叉树》简单一些,牛客网将这两道题应该是放错顺序了。
思路和上一道题一样,区别在于,这把是先入先出,使用队列即可。
2、代码
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | /* 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; } }; |
微信公众号
分享技术,乐享生活:微信公众号搜索「JackCui-AI」关注一个在互联网摸爬滚打的潜行者。
2018年7月18日 下午8:51 沙发
可以用递归写一个
2018年7月18日 下午9:14 1层
@爱看的剧 嗯,递归会整洁一些。