0
0
DSA C++programming~20 mins

Zigzag Level Order Traversal in DSA C++ - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Zigzag Traversal Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of Zigzag Level Order Traversal on a simple tree
What is the output of the following C++ code performing zigzag level order traversal on the given binary tree?
DSA C++
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

#include <iostream>
#include <vector>
#include <deque>

using namespace std;

vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
    vector<vector<int>> result;
    if (!root) return result;
    deque<TreeNode*> dq;
    dq.push_back(root);
    bool leftToRight = true;
    while (!dq.empty()) {
        int size = dq.size();
        vector<int> level(size);
        for (int i = 0; i < size; ++i) {
            TreeNode* node = dq.front();
            dq.pop_front();
            int index = leftToRight ? i : (size - 1 - i);
            level[index] = node->val;
            if (node->left) dq.push_back(node->left);
            if (node->right) dq.push_back(node->right);
        }
        leftToRight = !leftToRight;
        result.push_back(level);
    }
    return result;
}

int main() {
    TreeNode* root = new TreeNode(1);
    root->left = new TreeNode(2);
    root->right = new TreeNode(3);
    root->left->left = new TreeNode(4);
    root->left->right = new TreeNode(5);
    root->right->right = new TreeNode(6);

    vector<vector<int>> res = zigzagLevelOrder(root);
    for (auto& level : res) {
        for (int val : level) cout << val << " ";
        cout << "\n";
    }
    return 0;
}
A[[1], [2, 3], [6, 5, 4]]
B[[1], [3, 2], [6, 5, 4]]
C[[1], [3, 2], [4, 5, 6]]
D[[1], [2, 3], [4, 5, 6]]
Attempts:
2 left
💡 Hint
Remember that zigzag means alternating the order of nodes at each level.
🧠 Conceptual
intermediate
1:30remaining
Understanding the role of deque in zigzag traversal
Why is a double-ended queue (deque) used in zigzag level order traversal instead of a regular queue?
ABecause deque prevents duplicate nodes from being added.
BBecause deque automatically sorts the nodes at each level.
CBecause deque uses less memory than a regular queue.
DBecause deque allows insertion and deletion from both ends, enabling reversal of traversal direction efficiently.
Attempts:
2 left
💡 Hint
Think about how zigzag traversal changes direction at each level.
Predict Output
advanced
2:00remaining
Output of zigzag traversal with null children nodes
What is the output of the following zigzag traversal code on the given tree with some null children?
DSA C++
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

#include <iostream>
#include <vector>
#include <deque>

using namespace std;

vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
    vector<vector<int>> result;
    if (!root) return result;
    deque<TreeNode*> dq;
    dq.push_back(root);
    bool leftToRight = true;
    while (!dq.empty()) {
        int size = dq.size();
        vector<int> level(size);
        for (int i = 0; i < size; ++i) {
            TreeNode* node = dq.front();
            dq.pop_front();
            int index = leftToRight ? i : (size - 1 - i);
            level[index] = node->val;
            if (node->left) dq.push_back(node->left);
            if (node->right) dq.push_back(node->right);
        }
        leftToRight = !leftToRight;
        result.push_back(level);
    }
    return result;
}

int main() {
    TreeNode* root = new TreeNode(10);
    root->left = new TreeNode(20);
    root->right = new TreeNode(30);
    root->left->right = new TreeNode(40);
    root->right->left = new TreeNode(50);

    vector<vector<int>> res = zigzagLevelOrder(root);
    for (auto& level : res) {
        for (int val : level) cout << val << " ";
        cout << "\n";
    }
    return 0;
}
A[[10], [30, 20], [40, 50]]
B[[10], [20, 30], [50, 40]]
C[[10], [30, 20], [50, 40]]
D[[10], [20, 30], [40, 50]]
Attempts:
2 left
💡 Hint
Check the order of nodes at each level carefully, especially the last level.
🔧 Debug
advanced
2:00remaining
Identify the error in zigzag traversal code snippet
What error will the following code produce when performing zigzag level order traversal?
DSA C++
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
    vector<vector<int>> result;
    if (!root) return result;
    deque<TreeNode*> dq;
    dq.push_back(root);
    bool leftToRight = true;
    while (!dq.empty()) {
        int size = dq.size();
        vector<int> level(size);
        for (int i = 0; i < size; ++i) {
            TreeNode* node = dq.back();
            dq.pop_back();
            int index = leftToRight ? i : (size - 1 - i);
            level[index] = node->val;
            if (node->left) dq.push_front(node->left);
            if (node->right) dq.push_front(node->right);
        }
        leftToRight = !leftToRight;
        result.push_back(level);
    }
    return result;
}
AThe code produces reversed output but no error.
BThe code causes an infinite loop because nodes are added incorrectly.
CThe code throws a runtime error due to accessing empty deque.
DThe code runs correctly and returns the zigzag traversal.
Attempts:
2 left
💡 Hint
Check how nodes are added and removed from the deque inside the loop.
🚀 Application
expert
1:30remaining
Number of nodes processed in zigzag traversal
Given a perfect binary tree of height 3 (levels 0 to 3), how many nodes will be processed in total during a zigzag level order traversal?
A15
B7
C14
D8
Attempts:
2 left
💡 Hint
Recall the total number of nodes in a perfect binary tree of height h is 2^(h+1) - 1.