一、题目描述
二、解题思路
使用层次遍历,在每次进入循环的时候记录当前在队列中的数据的个数,那么这个数字就是当前这一层的节点个数,再加一个bool
型变量判断当前是否应该翻转
三、解题代码
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> sln;
if(!root) return sln;
queue<TreeNode*> q;
q.push(root);
bool flag = 0;
while(!q.empty()){
auto len = q.size();
vector<int> ins;
for(size_t i = 0; i < len; i++){
auto num = q.front();
q.pop();
ins.push_back(num->val);
if(num->left) q.push(num->left);
if(num->right) q.push(num->right);
}
if(flag == 1){
reverse(ins.begin(), ins.end());
}
flag = 1 - flag;
sln.push_back(ins);
}
return sln;
}
};