队列+宽搜(BFS)-103.二叉树的锯齿形层序遍历-力扣(LeetCode)
一、题目解析
1、锯齿形层序遍历就是从1开始,奇数从左往右遍历,偶数从右往左遍历
2、树的节点范围在[0,2000]
二、算法原理
解法:层序遍历+变量记录奇偶
这个标记位可以是bool or int,这个看自己选择了
这里用int当作标记位
详细过程
1、创建一个队列和二位数组
2、记标记位1,判断根是否为空,然后入队列
3、循环层序遍历之前,先记录此时队列中的元素个数,该个数为层序遍历循环数
4、通过front()取出队头元素,然后pop()掉,判断左右是否为空,不为空则将数据加入到一维数组中,循环结束后判断标记位奇偶,奇则将一维数组加入到二维数组中;偶则将一维数组逆置后,加入到二维数组
5、最后返回二维数组(二维数组应在入根前创建,如果root为空,也可以直接返回二维数组)
详细可以自行查看
链接:queue - C++ Reference
三、代码示例
class Solution {
public:vector<vector<int>> zigzagLevelOrder(TreeNode* root){int size = 1;vector<vector<int>> vv;queue<TreeNode*> vt;if(root) vt.push(root);else return vv;while(vt.size()){int num = vt.size();TreeNode* tmp;vector<int> v;while(num--){tmp = vt.front();vt.pop();v.push_back(tmp->val);if(tmp->left)vt.push(tmp->left);if(tmp->right)vt.push(tmp->right);}if(size++ % 2 == 0) reverse(v.begin(),v.end());vv.push_back(v);}return vv;}
};