What if you could instantly tell if two complex trees are perfect mirror images without getting lost in details?
Why Check if Two Trees are Symmetric in DSA C++?
Imagine you have two family trees drawn on paper, and you want to see if one is a mirror image of the other. Doing this by looking at each branch and comparing every detail manually can be confusing and tiring.
Manually checking each branch and node for symmetry is slow and easy to mess up. You might miss a small difference or spend too much time going back and forth, especially if the trees are big.
Using a smart method to compare trees node by node, checking if one side matches the mirror of the other, makes this task quick and reliable. The method automatically walks through both trees together, making sure they reflect each other perfectly.
bool isSymmetricManual(Node* root1, Node* root2) {
// Manually compare each node and subtree
// Lots of repeated code and checks
return false; // Placeholder for complex manual checks
}bool isSymmetric(Node* root) {
return isMirror(root, root);
}
bool isMirror(Node* t1, Node* t2) {
if (!t1 && !t2) return true;
if (!t1 || !t2) return false;
return (t1->val == t2->val) &&
isMirror(t1->left, t2->right) &&
isMirror(t1->right, t2->left);
}This lets you quickly and confidently check if two trees are mirror images, enabling better understanding and manipulation of tree structures.
In computer graphics, checking if two shapes or scenes are symmetrical helps in rendering and animation, making sure objects look balanced and natural.
Manual comparison of trees is slow and error-prone.
Using a mirror-check method simplifies and speeds up the process.
This approach helps in many fields like graphics, data organization, and more.
Practice
Solution
Step 1: Understand symmetry in trees
Two trees are symmetric if one is the mirror reflection of the other around the center.Step 2: Compare structure and node values
Both structure and node values must match in a mirrored way for symmetry.Final Answer:
They are mirror images of each other around their center. -> Option CQuick Check:
Symmetry means mirror image = A [OK]
- Thinking same number of nodes means symmetric
- Only comparing root values
- Ignoring structure when checking symmetry
Solution
Step 1: Identify correct return type
The function should return a boolean indicating symmetry, so return type is bool.Step 2: Use pointers for tree nodes
Tree nodes are usually passed as pointers to avoid copying and to handle null nodes.Final Answer:
bool isSymmetric(TreeNode* root1, TreeNode* root2); -> Option BQuick Check:
Return bool and use pointers = C [OK]
- Using void return type
- Passing nodes by value instead of pointer
- Using int instead of bool for result
#include <iostream>
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
bool isMirror(TreeNode* t1, TreeNode* t2) {
if (!t1 && !t2) return true;
if (!t1 || !t2) return false;
return (t1->val == t2->val) && isMirror(t1->left, t2->right) && isMirror(t1->right, t2->left);
}
int main() {
TreeNode* root1 = new TreeNode(1);
root1->left = new TreeNode(2);
root1->right = new TreeNode(3);
TreeNode* root2 = new TreeNode(1);
root2->left = new TreeNode(3);
root2->right = new TreeNode(2);
if (isMirror(root1, root2))
std::cout << "Symmetric";
else
std::cout << "Not Symmetric";
return 0;
}Solution
Step 1: Analyze tree structures
root1 has left=2, right=3; root2 has left=3, right=2, which are mirror images.Step 2: Trace isMirror function
Values match and recursive calls check left-right and right-left subtrees, confirming symmetry.Final Answer:
Symmetric -> Option AQuick Check:
Mirror check returns true = Symmetric [OK]
- Confusing left and right subtree checks
- Ignoring null node base cases
- Assuming same structure means symmetric
bool isMirror(TreeNode* t1, TreeNode* t2) {
if (!t1 && !t2) return true;
if (!t1 || !t2) return false;
return (t1->val == t2->val) && isMirror(t1->left, t2->left) && isMirror(t1->right, t2->right);
}Solution
Step 1: Review recursive calls for symmetry
Symmetry requires comparing left subtree of one tree with right subtree of the other.Step 2: Identify incorrect subtree comparisons
The code compares left with left and right with right, which checks for identical trees, not symmetric.Final Answer:
It compares left subtree with left subtree instead of left with right. -> Option DQuick Check:
Mirror needs left-right swap, code misses it = D [OK]
- Comparing same side subtrees instead of mirrored sides
- Ignoring null checks
- Confusing identical and symmetric trees
Solution
Step 1: Understand symmetry check logic
Symmetry means one tree is mirror of the other, so compare left subtree of one with right subtree of other recursively.Step 2: Evaluate other approaches
Preorder traversal or node count alone do not guarantee symmetry; level order without mirroring misses mirror structure.Final Answer:
Use a recursive function that compares left subtree of first tree with right subtree of second tree and vice versa. -> Option AQuick Check:
Recursive mirror comparison solves symmetry = A [OK]
- Using simple traversal without mirroring
- Comparing only node counts or root values
- Ignoring subtree structure in mirror form
Ready to prove it?
Pass the test and this pattern moves unknown
