题目:
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
方法一:双端队列+duque+层序遍历
函数代码:
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>>res;
if(!root)
{
return res;
}
deque<TreeNode *>d;
d.push_back(root);
int len=0;
int flag=true;
TreeNode *p;
while(!d.empty())
{
len=d.size();
vector<int>vec;
while(len)
{
//TreeNode *p=d.front();
//d.pop_front();
//vec.push_back(p->val);
if(flag)
{
p=d.front();
d.pop_front();
vec.push_back(p->val);
if(p->left)
{
d.push_back(p->left);
}
if(p->right)
{
d.push_back(p->right);
}
}
else
{
p=d.back();
d.pop_back();
vec.push_back(p->val);
if(p->right)
{
d.push_front(p->right);
}
if(p->left)
{
d.push_front(p->left);
}
}
//可用vec.push_back(p->val)代替if else 中的两次放入vec数组中;
len--;
}
flag=!flag;
res.push_back(vec);
}
return res;
}
};