从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
--------------------------------------------------------------------------------------------------------
加一个辅助队列,和上道题思路差不多,主要是难在队列中要始终保持是当前层节点或者是下一层所有节点,这就需要一个变量记载当前队列中size(),循环i<size(),然后将队列中节点加入二元数组
/*
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> >bp;
deque<TreeNode*> res;
res.push_back(pRoot);
if (!pRoot)return bp;
while (!res.empty())
{
//这道题最难的就是找出每层的节点,并且保持队列中一直是当前层或者是下一层节点
int loo = 0, q = res.size();
vector<int> cm;
while (loo++ < q)//这个循环就是为了找出下一层的所有节点,每一次循环次数就是当前层节点的个数(deque当前的size()))
//然后每次将当前层节点的下一次层节点加入队列,队列在弹出当前层节点,之后再把当前节点装进二元数组
{
cm.push_back(res.front()->val);
if (res.front()->left)res.push_back(res.front()->left);
if (res.front()->right)res.push_back(res.front()->right);
res.pop_front();
}
bp.push_back(cm);//插入行,有多少vector<int> cm就是多少行,每个cm中有多少数就是每行有多少列
cm.pop_back();
}
return bp;
}
};