题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:与按行打印思路相思,定义一个队列,将元素的孩子一次插入队列,销毁该元素。但每行输出时要判断是奇数还是偶数,偶数列时用反转序列std::reverse(反转区间) ,然后再输出。
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot)
{
vector<vector<int> > vec;
if(pRoot==nullptr)
return vec;
queue<TreeNode*> que;
que.push(pRoot);
int count=1;
while(! que.empty())
{
vector<int> c;
int m= que.size();
for(int i=0;i<m;i++)
{
TreeNode* temp= que.front();
que.pop(); //先出后出都可以
c.push_back(temp->val);
if(temp->left)
que.push(temp->left);
if(temp->right)
que.push(temp->right);
}
if(count%2==0)
std::reverse(c.begin(),c.end()); // 反转数列
vec.push_back(c);
count++;
}
return vec;
}
};