Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]想法: 這題也是採用 BFS traverse,然後用一個額外的變數紀錄目前是奇數層還是偶數層,遇到奇數層就將結果翻轉後
在存入。
完整程式碼:class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
if (root == nullptr) { return {}; }
vector<vector<int>> res;
queue<TreeNode*> q;
q.push(root);
int cnt = 0;
while (!q.empty()) {
int q_size = q.size();
vector<int> level;
for (int i = 0; i < q_size; i++) {
auto cur = q.front();
q.pop();
level.emplace_back(cur->val);
if (cur->left != nullptr) { q.push(cur->left); }
if (cur->right != nullptr) { q.push(cur->right); }
}
if (cnt++ % 2) { reverse(level.begin(), level.end()); }
res.emplace_back(level);
}
return res;
}
};
沒有留言:
張貼留言