![](https://img.haomeiwen.com/i13407176/b6722d2baa7e30de.jpg)
题目.jpg
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(): val(0), left(nullptr), right(nullptr) {}
TreeNode(int x): val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode* left, TreeNode* right): val(x), left(left), right(right) {}
};
// 解题思路:利用层序遍历代码模板,使用layer变量判断层序号是否是奇数层,若是则将奇数层遍历后的结果逆序后存入result中;反之,直接存入result数组中;
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> result;
queue<TreeNode*> que;
if(root != nullptr) que.push(root);
int layer = 0;
while(!que.empty()) {
int size = que.size();
vector<int> vec;
for(int i = 0; i < size; i++) {
TreeNode* node = que.front();
que.pop();
vec.push_back(node->val);
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
if(layer % 2 == 1) reverse(vec.begin(), vec.end());
result.push_back(vec);
layer++;
}
return result;
}
};
网友评论