Bird
Raised Fist0
DSA Cprogramming~10 mins

Top View of Binary Tree in DSA C - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to declare the structure for a binary tree node.

DSA C
struct Node {
    int data;
    struct Node* [1];
    struct Node* right;
};
Drag options to blanks, or click blank then click option'
Aleft
Bchild
Cprev
Dnext
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'child' or 'next' instead of 'left' for the left child pointer.
2fill in blank
easy

Fill the blanks to complete the main function that initializes and calls the top view utility.

DSA C
int main() {
    struct Node* root = newNode(1);
    root->left = newNode(2);
    root->right = newNode(3);
    int minHd = 0, maxHd = 0;
    int visited[100] = {0};
    topViewUtil(root, [1], &minHd, &maxHd, visited);
    return [2];
}

struct Node* newNode(int data) {
    struct Node* node = (struct Node*)malloc(sizeof(struct Node));
    node->data = data;
    node->left = NULL;
    node->right = NULL;
    return node;
}
Drag options to blanks, or click blank then click option'
A1
B0
Attempts:
3 left
💡 Hint
Common Mistakes
Using 1 instead of 0 for horizontal distance or return value.
3fill in blank
medium

Complete the code to create a new node with given data.

DSA C
struct Node* newNode(int data) {
    struct Node* node = (struct Node*)malloc(sizeof(struct Node));
    node->data = data;
    node->left = NULL;
    node->[1] = NULL;
    return node;
}
Drag options to blanks, or click blank then click option'
Achild
Bparent
Cnext
Dright
Attempts:
3 left
💡 Hint
Common Mistakes
Initializing wrong pointer like 'parent' or 'next' instead of 'right'.
4fill in blank
medium

Complete the code to print the level order traversal of the binary tree using a queue.

DSA C
void topView(struct Node* root) {
    if (root == NULL) return;
    struct Queue* q = createQueue();
    enqueue(q, root);
    while (!isEmpty(q)) {
        struct Node* temp = dequeue(q);
        printf("%d ", temp->data);
        if (temp->left) enqueue(q, temp->[1]);
        if (temp->right) enqueue(q, temp->right);
    }
}
Drag options to blanks, or click blank then click option'
Aparent
Bleft
Cnext
Dchild
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'temp->parent' or 'temp->next' instead of 'temp->left'.
5fill in blank
hard

Fill both blanks to complete the function that stores the first node at each horizontal distance for top view.

DSA C
void topViewUtil(struct Node* root, int hd, int* minHd, int* maxHd, int* visited) {
    if (root == NULL) return;
    if(hd < *minHd) *minHd = hd;
    if(hd > *maxHd) *maxHd = hd;
    topViewUtil(root->[1], hd - 1, minHd, maxHd, visited);
    if (visited[hd + 50] == 0) {
        printf("%d ", root->data);
        visited[hd + 50] = 1;
    }
    topViewUtil(root->[2], hd + 1, minHd, maxHd, visited);
}
Drag options to blanks, or click blank then click option'
Aleft
Bright
Cparent
Dchild
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'parent' or 'child' instead of 'left' or 'right'.

Practice

(1/5)
1. What does the top view of a binary tree represent?
easy
A. Nodes visible when the tree is viewed from the top
B. Nodes visible when the tree is viewed from the left side
C. Nodes visible when the tree is viewed from the right side
D. All leaf nodes of the tree

Solution

  1. Step 1: Understand the meaning of top view

    The top view of a binary tree shows nodes visible when looking down vertically from above the tree.
  2. Step 2: Compare with other views

    Left or right views show nodes from side angles, and leaf nodes are only the bottom nodes, not the top view.
  3. Final Answer:

    Nodes visible when the tree is viewed from the top -> Option A
  4. Quick Check:

    Top view = nodes seen from above [OK]
Hint: Top view shows nodes visible from above the tree [OK]
Common Mistakes:
  • Confusing top view with left or right view
  • Thinking top view includes all leaf nodes
  • Assuming top view shows all nodes
2. Which data structure is commonly used to find the top view of a binary tree in C?
easy
A. Stack
B. Queue
C. Hash Map
D. Linked List

Solution

  1. Step 1: Identify traversal method for top view

    Top view is found using level order traversal, which uses a queue to process nodes level by level.
  2. Step 2: Understand role of queue

    Queue helps visit nodes in order from top to bottom and left to right, needed for correct top view.
  3. Final Answer:

    Queue -> Option B
  4. Quick Check:

    Level order traversal uses queue [OK]
Hint: Use queue for level order traversal in top view [OK]
Common Mistakes:
  • Using stack which is for depth-first traversal
  • Confusing hash map as traversal structure
  • Using linked list instead of queue
3. What is the output top view of the binary tree below?

        1
       / \
      2   3
       \   \
        4   5
         \   \
          6   7
medium
A. [1, 2, 3, 4, 5]
B. [2, 1, 4, 6, 7]
C. [2, 1, 3, 4, 7]
D. [2, 1, 3, 5, 7]

Solution

  1. Step 1: Assign horizontal distances

    Assign horizontal distance (HD) from root: root(1) = 0, left child decreases HD by 1, right child increases HD by 1. So, 2 = -1, 3 = 1, 4 = 0, 5 = 2, 6 = 1, 7 = 3.
  2. Step 2: Select topmost nodes at each HD

    At HD -1: 2; HD 0: 1 (4 is lower); HD 1: 3 (6 is lower); HD 2: 5; HD 3: 7.
  3. Final Answer:

    [2, 1, 3, 5, 7] -> Option D
  4. Quick Check:

    Top view nodes by HD = [2,1,3,5,7] [OK]
Hint: Use horizontal distance and pick top nodes [OK]
Common Mistakes:
  • Choosing lower nodes instead of top nodes
  • Ignoring horizontal distance concept
  • Mixing order of nodes in output
4. Consider this C code snippet to print top view of a binary tree:

void topView(Node* root) {
    if (!root) return;
    map topNode;
    queue> q;
    q.push({root, 0});
    while (!q.empty()) {
        auto p = q.front(); q.pop();
        Node* node = p.first;
        int hd = p.second;
        if (topNode.find(hd) == topNode.end())
            topNode[hd] = node->data;
        if (node->left) q.push({node->left, hd - 1});
        if (node->right) q.push({node->right, hd + 1});
    }
    for (auto it : topNode)
        cout << it.second << " ";
}
What is the error in this code?
medium
A. Incorrect horizontal distance calculation
B. Not checking if root is NULL
C. Using C++ STL map and queue in C code
D. Missing return statement in void function

Solution

  1. Step 1: Identify language mismatch

    The code uses C++ STL containers like map and queue, but the function is declared in C style which does not support these STL features.
  2. Step 2: Check other code parts

    Root NULL check is present, horizontal distance is correctly updated, and void functions do not require return statements.
  3. Final Answer:

    Using C++ STL map and queue in C code -> Option C
  4. Quick Check:

    C code cannot use C++ STL containers [OK]
Hint: C code can't use C++ STL containers like map or queue [OK]
Common Mistakes:
  • Ignoring language differences between C and C++
  • Thinking void functions need return
  • Assuming horizontal distance logic is wrong
5. You have a binary tree where multiple nodes share the same horizontal distance and level. How should you modify the top view algorithm to always show the leftmost node at that horizontal distance?
hard
A. Store the first node encountered at each horizontal distance during level order traversal
B. Store the last node encountered at each horizontal distance during level order traversal
C. Store nodes with maximum depth at each horizontal distance
D. Store nodes with minimum depth at each horizontal distance but prefer right child first

Solution

  1. Step 1: Understand node selection in top view

    Top view shows the first node encountered at each horizontal distance during level order traversal, which naturally picks the leftmost node at that distance.
  2. Step 2: Avoid overwriting nodes

    By storing only the first node at each horizontal distance and ignoring later nodes, the leftmost node is preserved.
  3. Final Answer:

    Store the first node encountered at each horizontal distance during level order traversal -> Option A
  4. Quick Check:

    First node at HD = leftmost node [OK]
Hint: Keep first node per horizontal distance in level order [OK]
Common Mistakes:
  • Overwriting with last node instead of first
  • Choosing nodes by max depth instead of min
  • Preferring right child first breaks leftmost rule
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard