题目要求:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行
解题关键:
(1)使用队列保存从根节点开始的所有待打印节点,每次都输出队首的结点,并将该节点的儿子均压入队尾,直到队列为空,打印完毕,这是按层输出的关键
(2)如果加上“每层输出一行”这个约束条件,就需要在每开始打印一层之前,用一个sum标记该层的结点数目(根节点所在层sum=1),然后用一个num记录压入队尾的该层结点的孩子总数,然后每次打印一个节点,sum减小1,num增加的数目为当前打印节点的孩子数目,在打印完该层的结点时,sum=0;num的数目此时为下一层的结点数,此时将num赋给sum,并将num置零,并进入下一层的打印
/*
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;
vector<int> temp;
queue<TreeNode*> Nodes;
if(pRoot==nullptr)
return result;
Nodes.push(pRoot);
int sum=1;
int num=0;
while(!Nodes.empty())
{
pRoot=Nodes.front();
Nodes.pop();
--sum;
temp.push_back(pRoot->val);
if(pRoot->left)
{
Nodes.push(pRoot->left);
++num;
}
if(pRoot->right)
{
Nodes.push(pRoot->right);
++num;
}
if(sum==0)
{
sum=num;
num=0;
result.push_back(temp);
temp.clear();
}
}
return result;
}
};