给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
简要题解:
该题和层序遍历一样利用队列来解决不过由于要蛇形遍历因此我们就加了一个变量控制其转向主要代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>>ans;
if(root==NULL) return ans;
queue<TreeNode*>q;
q.push(root);int flag=1;
while(!q.empty())
{
vector<int>tem; int len=q.size();
flag^=1;
for(int i=0;i<len;i++)
{
TreeNode* t=q.front();q.pop();
tem.push_back(t->val);
if(t->left)q.push(t->left);
if(t->right)q.push(t->right);
}
if(flag) reverse(tem.begin(),tem.end());
ans.push_back(tem);
}
return ans;
}
};