📖 Scenario: Imagine you have two family trees represented as binary trees. You want to check if these two trees are mirror images of each other, meaning they are symmetric.
🎯 Goal: Build a program that creates two binary trees, sets up a helper function to check symmetry, and then uses it to print whether the two trees are symmetric.
📋 What You'll Learn
Create two binary trees using the TreeNode class with exact node values
Create a helper function called is_mirror that takes two nodes and checks if they are mirror images
Create a function called are_symmetric that uses is_mirror to check if two trees are symmetric
Print True if the trees are symmetric, otherwise False
💡 Why This Matters
🌍 Real World
Checking if two trees are symmetric is useful in graphics, data comparison, and validating mirrored data structures.
💼 Career
Understanding tree symmetry helps in software development roles involving data structures, algorithms, and system design.
Progress0 / 4 steps
1
Create two binary trees
Create a class called TreeNode with an __init__ method that takes val, left, and right. Then create two trees called tree1 and tree2 with these exact structures:
tree1: root 1, left child 2, right child 3 tree2: root 1, left child 3, right child 2
DSA Python
Hint
Define the TreeNode class first. Then create tree1 with root value 1, left child 2, right child 3. Similarly, create tree2 with root 1, left child 3, right child 2.
2
Create the helper function is_mirror
Create a function called is_mirror that takes two parameters node1 and node2. It should return True if both nodes are None, return False if only one is None, and otherwise check if node1.val == node2.val and recursively check is_mirror(node1.left, node2.right) and is_mirror(node1.right, node2.left).
DSA Python
Hint
Check if both nodes are None, then return True. If only one is None, return False. Otherwise, check if values are equal and recursively check left and right children in mirror order.
3
Create the function are_symmetric
Create a function called are_symmetric that takes two parameters root1 and root2. It should return the result of calling is_mirror(root1, root2).
DSA Python
Hint
Simply return the result of is_mirror(root1, root2).
4
Print if the two trees are symmetric
Use print to display the result of calling are_symmetric(tree1, tree2).
DSA Python
Hint
Call print(are_symmetric(tree1, tree2)) to show if the trees are symmetric.
Practice
(1/5)
1. What does it mean for two binary trees to be symmetric?
easy
A. They are mirror images of each other around their center.
B. They have the same number of nodes.
C. They have the same root value only.
D. They have identical left subtrees only.
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 A
Quick Check:
Symmetry means mirror image = A [OK]
Hint: Symmetric trees mirror each other exactly [OK]
Common Mistakes:
Thinking same number of nodes means symmetric
Ignoring node values in comparison
Checking only left or right subtree
2. Which of the following Python function signatures is correct to check if two trees are symmetric?
easy
A. def is_symmetric(tree1, tree2)
B. def is_symmetric(tree1 tree2):
C. def is_symmetric(tree1, tree2) -> bool:
D. def is_symmetric(tree1, tree2): return True
Solution
Step 1: Check syntax for function definition
Python functions require parentheses around parameters and a colon at the end.
Step 2: Identify correct type hint usage
def is_symmetric(tree1, tree2) -> bool: uses correct syntax with type hint and colon, making it valid and clear.
Final Answer:
def is_symmetric(tree1, tree2) -> bool: -> Option C
Quick Check:
Correct Python function syntax with type hint = D [OK]
Hint: Use parentheses and colon; type hints are optional but clear [OK]
Common Mistakes:
Missing comma between parameters
Omitting colon at function end
Incorrect parameter syntax without parentheses
3. What will be the output of the following code snippet?
class Node:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def is_mirror(t1, t2):
if not t1 and not t2:
return True
if not t1 or not t2:
return False
return (t1.val == t2.val) and is_mirror(t1.left, t2.right) and is_mirror(t1.right, t2.left)
root1 = Node(1)
root1.left = Node(2)
root1.right = Node(3)
root2 = Node(1)
root2.left = Node(3)
root2.right = Node(2)
print(is_mirror(root1, root2))
medium
A. True
B. False
C. None
D. Error
Solution
Step 1: Check base cases for empty nodes
Both trees have root 1, and their left and right children are swapped but equal in value.
Step 2: Recursively verify mirror condition
Left of root1 (2) matches right of root2 (2), and right of root1 (3) matches left of root2 (3), so all conditions return True.
Final Answer:
True -> Option A
Quick Check:
Mirror check returns True for swapped children = A [OK]
Hint: Mirror means left of one equals right of other [OK]
Common Mistakes:
Confusing left and right children in recursion
Ignoring base cases for None nodes
Assuming same structure means symmetric
4. Identify the error in this code snippet that checks if two trees are symmetric:
def is_symmetric(t1, t2):
if t1 is None and t2 is None:
return True
if t1 is None or t2 is None:
return False
if t1.val != t2.val:
return False
return is_symmetric(t1.left, t2.left) and is_symmetric(t1.right, t2.right)
medium
A. It does not check for None nodes.
B. It compares left with left and right with right instead of mirror sides.
C. It returns True too early without checking values.
D. It uses 'is' instead of '==' for value comparison.
Solution
Step 1: Analyze recursive calls for symmetry
The function compares left subtree of t1 with left subtree of t2 and right with right, which is incorrect for mirror symmetry.
Step 2: Correct mirror comparison
It should compare left of t1 with right of t2 and right of t1 with left of t2 to check mirror symmetry properly.
Final Answer:
It compares left with left and right with right instead of mirror sides. -> Option B
Quick Check:
Mirror check requires cross comparison = B [OK]
Hint: Mirror means cross compare left with right [OK]
Common Mistakes:
Comparing same sides instead of mirror sides
Confusing 'is' and '==' for values
Missing base cases for None nodes
5. Given two binary trees, write a function to check if they are symmetric considering that one tree might be None. Which approach correctly handles this edge case?
hard
A. Return False immediately if either tree is None.
B. Ignore None checks and compare node values only.
C. Only compare root values and ignore subtrees.
D. Return True if both trees are None, else check mirror recursively.
Solution
Step 1: Handle None edge cases carefully
If both trees are None, they are symmetric by definition, so return True.
Step 2: Recursively check mirror symmetry
If only one is None, return False. Otherwise, compare root values and recursively check left of one with right of other and vice versa.
Final Answer:
Return True if both trees are None, else check mirror recursively. -> Option D
Quick Check:
Both None means symmetric, else recurse mirror check = C [OK]
Hint: Both None means symmetric; one None means not symmetric [OK]
Common Mistakes:
Returning False if either tree is None without checking both
Skipping recursive mirror checks
Comparing only root values
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.