Bird
Raised Fist0
DSA C#programming~5 mins

Mirror a Binary Tree in DSA C# - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Mirror a Binary Tree
O(n)
Understanding Time Complexity

We want to understand how long it takes to flip a binary tree so its left and right children swap places.

How does the time needed grow as the tree gets bigger?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


public void MirrorTree(Node root) {
    if (root == null) return;
    MirrorTree(root.Left);
    MirrorTree(root.Right);
    Node temp = root.Left;
    root.Left = root.Right;
    root.Right = temp;
}
    

This code flips the tree by swapping left and right children for every node recursively.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Recursive calls visiting each node once.
  • How many times: Once per node in the tree.
How Execution Grows With Input

Each node is visited once to swap its children, so the work grows directly with the number of nodes.

Input Size (n)Approx. Operations
10About 10 swaps
100About 100 swaps
1000About 1000 swaps

Pattern observation: The time grows linearly as the tree size increases.

Final Time Complexity

Time Complexity: O(n)

This means the time to mirror the tree grows directly with the number of nodes.

Common Mistake

[X] Wrong: "The time complexity is O(n²) because of the recursive calls inside each other."

[OK] Correct: Each node is visited only once, so the total work is proportional to the number of nodes, not multiplied by itself.

Interview Connect

Understanding this helps you explain how recursion visits all parts of a tree efficiently, a key skill in many tree problems.

Self-Check

"What if we changed the code to use an iterative approach with a stack? How would the time complexity change?"

Practice

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

Solution

  1. Step 1: Understand the mirror operation

    Mirroring means swapping left and right children at every node in the tree.
  2. Step 2: Identify the effect on the tree

    This operation flips the tree horizontally, creating a mirror image.
  3. Final Answer:

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

    Mirror = Swap children [OK]
Hint: Mirror means swap left and right children at all nodes [OK]
Common Mistakes:
  • Thinking mirror means sorting nodes
  • Confusing mirror with deleting nodes
  • Assuming mirror counts nodes
2. Which of the following C# method signatures correctly represents a recursive function to mirror a binary tree node named root?
easy
A. void MirrorTree(Node root)
B. int MirrorTree(Node root)
C. Node MirrorTree(Node root)
D. bool MirrorTree(Node root)

Solution

  1. Step 1: Understand the purpose of the function

    The function modifies the tree in place and does not need to return a value.
  2. Step 2: Choose the correct return type

    Since it changes the tree nodes directly, the return type should be void.
  3. Final Answer:

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

    In-place change means void return [OK]
Hint: Mirror function usually returns void as it modifies tree directly [OK]
Common Mistakes:
  • Returning int or bool unnecessarily
  • Returning Node when not needed
  • Using incorrect parameter types
3. Given the following binary tree and the C# code to mirror it, what will be the output of the inorder traversal after mirroring?

    1
   / \
  2   3
 /     \
4       5

void MirrorTree(Node root) {
  if (root == null) return;
  var temp = root.left;
  root.left = root.right;
  root.right = temp;
  MirrorTree(root.left);
  MirrorTree(root.right);
}

// Inorder traversal prints nodes in order: left, root, right
medium
A. [3, 5, 1, 4, 2]
B. [4, 2, 1, 3, 5]
C. [5, 3, 1, 2, 4]
D. [1, 2, 4, 3, 5]

Solution

  1. Step 1: Mirror the tree structure

    Swap left and right children at every node:
    Original root 1: left=2, right=3 -> after mirror left=3, right=2
    Node 2: left=4, right=null -> after mirror left=null, right=4
    Node 3: left=null, right=5 -> after mirror left=5, right=null
  2. Step 2: Perform inorder traversal on mirrored tree

    Inorder = left, root, right
    Start at root (1):
    Left subtree (3): left=5, right=null -> inorder: 5,3
    Root: 1
    Right subtree (2): left=null, right=4 -> inorder: 2,4
    Combined inorder: [5, 3, 1, 2, 4]
  3. Final Answer:

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

    Mirror + inorder = [5,3,1,2,4] [OK]
Hint: Mirror swaps children; inorder visits left-root-right [OK]
Common Mistakes:
  • Not swapping children correctly
  • Confusing preorder with inorder traversal
  • Forgetting to mirror all nodes
4. The following C# code attempts to mirror a binary tree but does not work correctly. What is the main error?

void MirrorTree(Node root) {
  MirrorTree(root.left);
  MirrorTree(root.right);
  var temp = root.left;
  root.left = root.right;
  root.right = temp;
}
medium
A. Swapping children happens after recursive calls, causing incorrect mirror
B. Missing base case for null root
C. Using var instead of explicit type causes error
D. Function should return Node instead of void

Solution

  1. Step 1: Analyze the base case

    The code lacks an if (root == null) return; check before recursing on children.
  2. Step 2: Understand why this causes error

    Recursing on null children leads to NullReferenceException or stack overflow since there's no termination condition.
  3. Final Answer:

    Missing base case for null root -> Option B
  4. Quick Check:

    Recursion needs if(root == null) return; [OK]
Hint: Always include null base case in tree recursion [OK]
Common Mistakes:
  • Omitting base case for null nodes
  • Swapping after recursion instead of before
  • Thinking var causes error
5. You have a binary tree where some nodes have only one child (either left or right). You want to mirror this tree using C#. Which approach correctly handles all cases including nodes with single children?
hard
A. Mirror by creating a new tree instead of modifying original
B. Only swap children if both left and right children exist
C. Swap children only at leaf nodes
D. Recursively swap left and right children if node is not null, then recurse on both children

Solution

  1. Step 1: Consider nodes with single child

    Nodes with only one child still need swapping; swapping null with a child is valid.
  2. Step 2: Choose recursive approach that swaps and recurses regardless of child presence

    Swapping children even if one is null ensures correct mirror. Then recurse on both children to continue mirroring.
  3. Final Answer:

    Recursively swap left and right children if node is not null, then recurse on both children -> Option D
  4. Quick Check:

    Swap children always, recurse both sides [OK]
Hint: Always swap children even if one is null, then recurse [OK]
Common Mistakes:
  • Skipping swap when one child is null
  • Swapping only leaf nodes
  • Creating new tree unnecessarily
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