实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
思路:还是二叉树的层序遍历,设根节点在第0层,则偶数层是从左到右打印,奇数层是从右到左打印。遍历树的方式不变,用队列,每一层从左到右遍历;在奇数层做一个判断,如果是奇数层,每个节点插入到数组的最前面,或者一层都插入完之后对数组做一个翻转
vector<vector<int>> levelOrder(TreeNode* root) {
if(!root)return {};
vector<vector<int>>res;
queue<TreeNode*>que;
que.push(root);
int flag=1;
while(!que.empty()){
int num=que.size();
vector<int>tmp;
for(int i=0;i<num;i++){
root=que.front();
que.pop();
tmp.push_back(root->val);
if(root->left)que.push(root->left);
if(root->right)que.push(root->right);
}
if(flag==-1)reverse(tmp.begin(),tmp.end());
res.push_back(tmp);
flag*=-1;
}
return res;
}