题目:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:
和层次打印类似,只不过每次都将队列里面的元素取出,记录前层数,返回结果时当前层数的奇偶性判断返回正序还是逆序。
代码:
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot)
{
vector<vector<int> > res;
if(NULL == pRoot)
return res;
int cur_sequence = 0;
queue<TreeNode*> que;
que.push(pRoot);
while(!que.empty())
{
vector<TreeNode*> tmp;
vector<int> restmp;
while(!que.empty())
{
tmp.push_back(que.front());
que.pop();
}
for(int i=0; i<tmp.size(); i++)
{
restmp.push_back(tmp[i]->val);
if(NULL != tmp[i]->left)
que.push(tmp[i]->left);
if(NULL != tmp[i]->right)
que.push(tmp[i]->right);
}
res.push_back(0 == (cur_sequence++ & 1) ? restmp : vector<int> (restmp.rbegin(), restmp.rend()));
}
return res;
}
};