Ninja technique🥷 to ACE DSA Interviews.
class Solution {
private:
void zigzagLevelOrderRec(TreeNode* root, int level, vector<vector<int>>& res)
{
if (root == NULL)
return;
if (level >= res.size()) {
res.push_back(vector<int>());
}
if (level & 1) { // odd
res[level].insert(res[level].begin(), root->val);
} else { // even
res[level].push_back(root->val);
}
zigzagLevelOrderRec(root->left, level + 1, res);
zigzagLevelOrderRec(root->right, level + 1, res);
}
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root)
{
vector<vector<int>> res;
if (root == NULL)
return res;
zigzagLevelOrderRec(root, 0, res);
return res;
}
};
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root)
{
vector<vector<int>> res;
if (root == NULL) {
return res;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int sz = q.size();
vector<int> currLevel;
for (int i = 0; i < sz; i++) {
TreeNode* node = q.front();
q.pop();
if (node->left)
q.push(node->left);
if (node->right)
q.push(node->right);
currLevel.push_back(node->val);
}
if (res.size() & 1) { // odd // only added this line
reverse(currLevel.begin(), currLevel.end());
}
res.push_back(currLevel);
}
return res;
}
};
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root)
{
vector<vector<int>> res;
if (root == NULL) {
return res;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int sz = q.size();
vector<int> currLevel;
bool isOdd = (res.size() & 1);
for (int i = 0; i < sz; i++) {
TreeNode* node = q.front();
q.pop();
if (node->left)
q.push(node->left);
if (node->right)
q.push(node->right);
if(isOdd)
currLevel.insert(currLevel.begin(), node->val);
else
currLevel.push_back(node->val);
}
res.push_back(currLevel);
}
return res;
}
};