题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路
- 按层遍历二叉树,使用队列数据结构,队列初始值为根节点,每次从队头取出一个元素打印,同时把左结点和右结点插入到队尾。当队列为空时,结束。
- 按照层打印,需要统计每层的节点数。两个节点数变量,当前层节点数和下一层节点总数。打印一个值,当前层数节点减一,当时减为0时,讲下一层节点总数赋值为当前层数节点。每加入一个左结点或者右结点,下层总结点数加1。
- 具体见code
code
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> >prinNode;
if(pRoot==NULL)
return prinNode;
deque<TreeNode*> nodeque;
if(pRoot)
nodeque.push_back(pRoot);
int curentline=1;
int nextline=0;
vector<int> tmpNodes;
while(!nodeque.empty())
{
TreeNode* node=nodeque.front();
tmpNodes.push_back(node->val);
nodeque.pop_front();
curentline--;
if(node->left)
{
nodeque.push_back(node->left);
nextline++;
}
if(node->right)
{
nodeque.push_back(node->right);
nextline++;
}
if(curentline<=0)
{
curentline=nextline;
nextline=0;
prinNode.push_back(tmpNodes);
tmpNodes.clear();
}
}
return prinNode;
}
};