给你二叉树的根节点 root
,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
解法:bfs,对于奇数层要放下一层的结点,正常从左到右遍历后,逆序一下即可,对于偶数层要放下一层结点,由于偶数层本身就是从当前层最后一个结点开始遍历的,然后要先放右结点再放左结点,再逆序,才能使得下一层(奇数层)是从左到右遍历的。
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
queue<TreeNode*>q;
vector<vector<int>>res;
if(!root) return res;
q.push(root);
int sum=2;
while(q.size())
{
vector<int>ans;
vector<TreeNode*>stack;
int sumNode = q.size();
for(int i=0;i<sumNode;i++)
{
auto t = q.front();
q.pop();
ans.push_back(t->val);
if(sum%2==0)
{
if(t->left)stack.push_back(t->left);
if(t->right)stack.push_back(t->right);
}
else
{
if(t->right)stack.push_back(t->right);
if(t->left)stack.push_back(t->left);
}
}
res.push_back(ans);
sum++;
for(int i=stack.size()-1;i>=0;i--)q.push(stack[i]);
}
return res;
}
};