【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】
题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路
考虑到这是一个宽度优先搜索的问题,要求同一层的结点在数组中也在同一行,所以我们每次遍历玩一层的结点的时候,我们还需要保存期路径,这就需要两个队列来完成。
/*
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> > ans;
vector<int> path;
if(pRoot==nullptr)
return ans;
queue<TreeNode*> Q,tmp;
Q.push(pRoot);
while(!Q.empty())
{
while(!Q.empty())
{
TreeNode *pNode = Q.front();
path.push_back(pNode->val);
Q.pop();
if(pNode->left)
tmp.push(pNode->left);
if(pNode->right)
tmp.push(pNode->right);
}
ans.push_back(path);
path.clear();
while(!tmp.empty())
{
Q.push(tmp.front());
tmp.pop();
}
}
return ans;
}
};