题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路:
用一个辅助队列,从左到右将节点输入,用一个null来作为隔断。每层输出。
输出的是值,不是节点指针,判断非空
代码:
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
queue<TreeNode*> traversal;
vector<vector<int> >res;
vector<int>tmp;
if(pRoot==nullptr)
return res;
traversal.push(pRoot);
traversal.push(nullptr); //间隔
TreeNode* pnode;
while(traversal.size()!=0)
{
//要将每一个除了nullptr的节点压进res
while(traversal.front()!=nullptr)
{
pnode=traversal.front();
tmp.push_back(pnode->val);
traversal.pop();
if(pnode->left)
traversal.push(pnode->left);
if(pnode->right)
traversal.push(pnode->right);
}
//出来之后,先将tmp压入解果
if(!tmp.empty())
{ res.push_back(tmp);
tmp.cleara();
}
//此时,我们的队列的头部是nullptr
if(traversal.front()==nullptr)
traversal.pop();
if(traversal.empty())
break;
else
traversal.push(nullptr);
}
return res;
}
}