题目:
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
分析:
//借助队列,将每一层元素放在对应不同的二维数组层中,最后将偶数层反转以下即可。
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
queue<pair<TreeNode*, int>> q;
int i=0;
if(pRoot)
q.push({pRoot, i});
vector<vector<int>> vv;
while(!q.empty())
{
pair<TreeNode*, int> front=q.front();//队首元素
TreeNode* node=front.first;//队首结点
int index=front.second;//队首结点下标
q.pop();
if(vv.size()<index+1)
vv.push_back({});
vv[index].push_back(node->val);//将这一层结点的数据放到vv的对应行中
//将下一层放到队列中(层数在上一层的基础上加1)
if(node->left)
q.push({node->left, index+1});
if(node->right)
q.push({node->right, index+1});
}
//反转vv中的偶数行
for(int i=1;i<vv.size();i+=2)
{
reverse(vv[i].begin(), vv[i].end());
}
//返回vv
return vv;
}
};