What if you could flip a whole tree upside down with just a few lines of code?
Why Mirror a Binary Tree in DSA C++?
Imagine you have a family tree drawn on paper, and you want to see its reflection as if looking in a mirror. Doing this by hand means redrawing every branch and leaf on the opposite side, which is tiring and easy to mess up.
Manually swapping every left and right branch is slow and error-prone. You might forget some branches or place them incorrectly, making the mirrored tree wrong and confusing.
Mirroring a binary tree with code swaps the left and right children of every node automatically. This simple process repeats down the tree, giving a perfect mirror image quickly and without mistakes.
void mirrorTree(Node* root) {
// Manually swap left and right for each node
if (root == nullptr) return;
Node* temp = root->left;
root->left = root->right;
root->right = temp;
mirrorTree(root->left);
mirrorTree(root->right);
}void mirrorTree(Node* root) {
if (!root) return;
std::swap(root->left, root->right);
mirrorTree(root->left);
mirrorTree(root->right);
}This lets you quickly create a mirrored version of any tree, useful in graphics, data transformations, and problem solving.
In photo editing apps, flipping an image horizontally is like mirroring a tree structure of pixels, making the picture look reversed instantly.
Manual mirroring is slow and error-prone.
Code swaps left and right children recursively for a perfect mirror.
Useful in many computer graphics and data tasks.
Practice
Solution
Step 1: Understand the mirror operation
Mirroring means swapping left and right children of every node in the tree.Step 2: Clarify what happens to nodes
Each node's left child becomes its right child and vice versa, recursively.Final Answer:
Swapping the left and right children of every node -> Option CQuick Check:
Mirror = Swap children [OK]
- Thinking mirror means reversing node values
- Confusing mirror with tree traversal order
- Assuming mirror deletes nodes
Solution
Step 1: Identify correct parameter type
The function should take a pointer to the root node to modify the tree in place.Step 2: Identify correct return type
Since the tree is modified in place, the function can return void.Final Answer:
void mirror(Node* root) -> Option AQuick Check:
Pointer param + void return = void mirror(Node* root) [OK]
- Passing node by value instead of pointer
- Returning Node instead of void
- Using incorrect parameter types
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);Solution
Step 1: Understand the original tree and inorder traversal
Original inorder: left-root-right = 4 2 1 3 5Step 2: Mirror swaps left and right children recursively
Mirrored tree structure: 1 / \ 3 2 / \ 5 4 Inorder traversal now: 5 3 1 2 4Final Answer:
5 3 1 2 4 -> Option BQuick Check:
Inorder mirrored = 5 3 1 2 4 [OK]
- Not swapping children correctly
- Confusing preorder with inorder traversal
- Printing original tree instead of mirrored
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;
}Solution
Step 1: Check function return type and usage
The function is declared void but tries to return root pointer, which causes a compile error.Step 2: Fix by removing the return statement
Since the tree is modified in place, no return is needed; remove 'return root;'.Final Answer:
Function should return void, remove 'return root;' -> Option DQuick Check:
Void function must not return value [OK]
- Returning value from void function
- Changing base case incorrectly
- Deleting nodes unnecessarily
Solution
Step 1: Understand counting swaps during recursion
Each node swap can be counted by returning 1 plus counts from left and right subtrees.Step 2: Modify mirror to return int and sum counts
Return 0 if node is null; else return 1 + mirror(left) + mirror(right).Final Answer:
Return the number of nodes from the function and sum left and right counts -> Option AQuick Check:
Return counts from recursion to sum swaps [OK]
- Using global variables causing side effects
- Counting nodes before and after mirroring (no change)
- Not accumulating counts correctly
Ready to prove it?
Pass the test and this pattern moves unknown
