Bird
Raised Fist0
DSA C++programming~10 mins

Mirror a 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 swap the left and right child nodes of the root.

DSA C++
void mirror(Node* root) {
    if (root == nullptr) return;
    Node* temp = root->left;
    root->left = root->[1];
    root->right = temp;
}
Drag options to blanks, or click blank then click option'
Aparent
Bleft
Cright
Dchild
Attempts:
3 left
💡 Hint
Common Mistakes
Assigning root->left to root->left again instead of root->right.
Swapping with a wrong pointer like parent or child.
2fill in blank
medium

Complete the code to recursively mirror the left subtree.

DSA C++
void mirror(Node* root) {
    if (root == nullptr) return;
    mirror(root->[1]);
    mirror(root->right);
    Node* temp = root->left;
    root->left = root->right;
    root->right = temp;
}
Drag options to blanks, or click blank then click option'
Aleft
Bright
Cparent
Dchild
Attempts:
3 left
💡 Hint
Common Mistakes
Calling mirror on root->right twice.
Calling mirror on an invalid pointer like parent.
3fill in blank
hard

Fix the error in the base case check to avoid null pointer dereference.

DSA C++
void mirror(Node* root) {
    if (root == [1]) return;
    mirror(root->left);
    mirror(root->right);
    Node* temp = root->left;
    root->left = root->right;
    root->right = temp;
}
Drag options to blanks, or click blank then click option'
ANULL
Bnullptr
C0
Dfalse
Attempts:
3 left
💡 Hint
Common Mistakes
Using NULL which is legacy and less type-safe.
Using 0 or false which are not pointers.
4fill in blank
hard

Fill both blanks to complete the recursive mirror function correctly.

DSA C++
void mirror(Node* root) {
    if (root == [1]) return;
    mirror(root->[2]);
    mirror(root->right);
    Node* temp = root->left;
    root->left = root->right;
    root->right = temp;
}
Drag options to blanks, or click blank then click option'
Anullptr
Bleft
Cright
Dparent
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong null check values.
Recursing on the wrong child pointer.
5fill in blank
hard

Fill all three blanks to implement the mirror function with both recursive calls and swapping.

DSA C++
void mirror(Node* root) {
    if (root == [1]) return;
    mirror(root->[2]);
    mirror(root->[3]);
    Node* temp = root->left;
    root->left = root->right;
    root->right = temp;
}
Drag options to blanks, or click blank then click option'
Anullptr
Bleft
Cright
Dparent
Attempts:
3 left
💡 Hint
Common Mistakes
Missing one of the recursive calls.
Incorrect null check.

Practice

(1/5)
1. What does mirroring a binary tree mean?
easy
A. Sorting the nodes in ascending order
B. Reversing the order of nodes in each level
C. Swapping the left and right children of every node
D. Deleting all leaf nodes

Solution

  1. Step 1: Understand the mirror operation

    Mirroring means swapping left and right children of every node in the tree.
  2. Step 2: Clarify what happens to nodes

    Each node's left child becomes its right child and vice versa, recursively.
  3. Final Answer:

    Swapping the left and right children of every node -> Option C
  4. Quick Check:

    Mirror = Swap children [OK]
Hint: Mirror means swap left and right children at all nodes [OK]
Common Mistakes:
  • Thinking mirror means reversing node values
  • Confusing mirror with tree traversal order
  • Assuming mirror deletes nodes
2. Which of the following is the correct C++ function signature to mirror a binary tree node?
easy
A. void mirror(Node* root)
B. int mirror(Node root)
C. Node mirror(Node* root)
D. void mirror(Node root)

Solution

  1. Step 1: Identify correct parameter type

    The function should take a pointer to the root node to modify the tree in place.
  2. Step 2: Identify correct return type

    Since the tree is modified in place, the function can return void.
  3. Final Answer:

    void mirror(Node* root) -> Option A
  4. Quick Check:

    Pointer param + void return = void mirror(Node* root) [OK]
Hint: Use pointer parameter and void return for in-place tree changes [OK]
Common Mistakes:
  • Passing node by value instead of pointer
  • Returning Node instead of void
  • Using incorrect parameter types
3. What is the output of the following code after mirroring the binary tree?
struct Node {
  int data;
  Node* left;
  Node* right;
};

void mirror(Node* root) {
  if (!root) return;
  mirror(root->left);
  mirror(root->right);
  Node* temp = root->left;
  root->left = root->right;
  root->right = temp;
}

// Tree before mirror:
//     1
//    / \
//   2   3
//  /     \
// 4       5

Node* root = new Node{1, new Node{2, new Node{4, nullptr, nullptr}, nullptr}, new Node{3, nullptr, new Node{5, nullptr, nullptr}}};
mirror(root);
// Print inorder traversal
void inorder(Node* node) {
  if (!node) return;
  inorder(node->left);
  std::cout << node->data << " ";
  inorder(node->right);
}
inorder(root);
medium
A. 5 3 1 4 2
B. 5 3 1 2 4
C. 1 2 4 3 5
D. 4 2 1 3 5

Solution

  1. Step 1: Understand the original tree and inorder traversal

    Original inorder: left-root-right = 4 2 1 3 5
  2. Step 2: Mirror swaps left and right children recursively

    Mirrored tree structure: 1 / \ 3 2 / \ 5 4 Inorder traversal now: 5 3 1 2 4
  3. Final Answer:

    5 3 1 2 4 -> Option B
  4. Quick Check:

    Inorder mirrored = 5 3 1 2 4 [OK]
Hint: Mirror swaps children; inorder reverses left-right order [OK]
Common Mistakes:
  • Not swapping children correctly
  • Confusing preorder with inorder traversal
  • Printing original tree instead of mirrored
4. Identify the error in this mirror function and choose the fix:
void mirror(Node* root) {
  if (root == nullptr) return;
  mirror(root->left);
  mirror(root->right);
  Node* temp = root->left;
  root->left = root->right;
  root->right = temp;
  return root;
}
medium
A. Swap root->left and root->right before recursive calls
B. Change 'if (root == nullptr)' to 'if (!root->left && !root->right)'
C. Add 'delete temp;' after swapping
D. Function should return void, remove 'return root;'

Solution

  1. Step 1: Check function return type and usage

    The function is declared void but tries to return root pointer, which causes a compile error.
  2. Step 2: Fix by removing the return statement

    Since the tree is modified in place, no return is needed; remove 'return root;'.
  3. Final Answer:

    Function should return void, remove 'return root;' -> Option D
  4. Quick Check:

    Void function must not return value [OK]
Hint: Void functions should not return values [OK]
Common Mistakes:
  • Returning value from void function
  • Changing base case incorrectly
  • Deleting nodes unnecessarily
5. Given a binary tree, how would you modify the mirror function to also count how many nodes were swapped during the mirroring process?
hard
A. Return the number of nodes from the function and sum left and right counts
B. Add a counter parameter and increment it each time children are swapped
C. Use a global variable to count swaps inside the mirror function
D. Count nodes before and after mirroring and subtract counts

Solution

  1. Step 1: Understand counting swaps during recursion

    Each node swap can be counted by returning 1 plus counts from left and right subtrees.
  2. Step 2: Modify mirror to return int and sum counts

    Return 0 if node is null; else return 1 + mirror(left) + mirror(right).
  3. Final Answer:

    Return the number of nodes from the function and sum left and right counts -> Option A
  4. Quick Check:

    Return counts from recursion to sum swaps [OK]
Hint: Return counts from recursion to sum swapped nodes [OK]
Common Mistakes:
  • Using global variables causing side effects
  • Counting nodes before and after mirroring (no change)
  • Not accumulating counts correctly
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