Bird
Raised Fist0
DSA C++programming~5 mins

Tree Traversal Preorder Root Left Right in DSA C++ - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Tree Traversal Preorder Root Left Right
O(n)
Understanding Time Complexity

We want to understand how the time needed to visit all nodes in a tree grows as the tree gets bigger.

How does the number of steps change when the tree has more nodes?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


void preorderTraversal(Node* root) {
    if (root == nullptr) return;
    visit(root);              // Process current node
    preorderTraversal(root->left);  // Traverse left subtree
    preorderTraversal(root->right); // Traverse right subtree
}
    

This code visits each node in the tree starting from the root, then left child, then right child.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Visiting each node once (the visit(root) call).
  • How many times: Exactly once per node in the tree.
How Execution Grows With Input

As the number of nodes (n) increases, the number of visits grows directly with n.

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

Pattern observation: The work grows in a straight line with the number of nodes.

Final Time Complexity

Time Complexity: O(n)

This means the time to complete the traversal grows directly with the number of nodes in the tree.

Common Mistake

[X] Wrong: "Preorder traversal takes more time because it visits nodes multiple times."

[OK] Correct: Each node is visited exactly once, so the time depends only on the number of nodes, not repeated visits.

Interview Connect

Understanding preorder traversal time helps you explain how tree algorithms scale and shows you can analyze recursive code clearly.

Self-Check

"What if we changed preorder traversal to inorder traversal? How would the time complexity change?"

Practice

(1/5)
1. What is the order of nodes visited in a preorder tree traversal?
easy
A. Right, Root, Left
B. Left, Root, Right
C. Left, Right, Root
D. Root, Left, Right

Solution

  1. Step 1: Understand preorder traversal definition

    Preorder traversal visits the root node first, then the left subtree, and finally the right subtree.
  2. Step 2: Match the order with options

    Root, Left, Right matches the order Root, Left, Right exactly.
  3. Final Answer:

    Root, Left, Right -> Option D
  4. Quick Check:

    Preorder = Root, Left, Right [OK]
Hint: Remember preorder starts with the root node first [OK]
Common Mistakes:
  • Confusing preorder with inorder or postorder
  • Visiting left before root
  • Visiting right before left
2. Which of the following C++ function signatures correctly represents a preorder traversal of a binary tree node Node*?
easy
A. void preorder(Node* root) { if(root) { cout << root->data; preorder(root->left); preorder(root->right); } }
B. void preorder(Node* root) { if(root) { preorder(root->left); preorder(root->right); cout << root->data; } }
C. void preorder(Node* root) { if(root) { preorder(root->right); cout << root->data; preorder(root->left); } }
D. void preorder(Node* root) { if(root) { preorder(root->left); cout << root->data; preorder(root->right); } }

Solution

  1. Step 1: Recall preorder traversal order

    Preorder visits root first, then left subtree, then right subtree.
  2. Step 2: Check function code order

    void preorder(Node* root) { if(root) { cout << root->data; preorder(root->left); preorder(root->right); } } prints root data first, then recursively visits left and right children, matching preorder.
  3. Final Answer:

    void preorder(Node* root) { if(root) { cout << root->data; preorder(root->left); preorder(root->right); } } -> Option A
  4. Quick Check:

    Print root first, then left, then right [OK]
Hint: Print root data before recursive calls for preorder [OK]
Common Mistakes:
  • Printing after recursive calls (postorder)
  • Swapping left and right recursive calls
  • Missing null check for root
3. Given the binary tree below, what is the preorder traversal output?

      10
     /  \
    5    15
   /    /  \
  3    12  20
medium
A. [10, 15, 20, 12, 5, 3]
B. [10, 5, 3, 15, 12, 20]
C. [3, 5, 10, 12, 15, 20]
D. [5, 3, 10, 12, 15, 20]

Solution

  1. Step 1: Start at root and visit nodes in preorder

    Visit root 10, then left subtree (5, then 3), then right subtree (15, then 12 and 20).
  2. Step 2: Write traversal sequence

    Sequence is 10, 5, 3, 15, 12, 20.
  3. Final Answer:

    [10, 5, 3, 15, 12, 20] -> Option B
  4. Quick Check:

    Preorder = Root, Left, Right = [10,5,3,15,12,20] [OK]
Hint: Follow root, then left subtree, then right subtree order [OK]
Common Mistakes:
  • Mixing preorder with inorder or postorder
  • Visiting right subtree before left
  • Skipping leaf nodes
4. Identify the error in the following preorder traversal function and select the corrected version:

void preorder(Node* root) {
  if(root == nullptr) return;
  preorder(root->left);
  cout << root->data << " ";
  preorder(root->right);
}
medium
A. void preorder(Node* root) { if(root == nullptr) return; cout << root->data << " "; preorder(root->left); preorder(root->right); }
B. void preorder(Node* root) { if(root == nullptr) return; preorder(root->right); cout << root->data << " "; preorder(root->left); }
C. void preorder(Node* root) { if(root == nullptr) return; preorder(root->left); preorder(root->right); cout << root->data << " "; }
D. void preorder(Node* root) { if(root == nullptr) return; cout << root->data << " "; preorder(root->right); preorder(root->left); }

Solution

  1. Step 1: Identify preorder traversal order

    Preorder visits root first, then left subtree, then right subtree.
  2. Step 2: Check given function and options

    The given function prints after left subtree, which is inorder traversal. void preorder(Node* root) { if(root == nullptr) return; cout << root->data << " "; preorder(root->left); preorder(root->right); } prints root first, then left, then right, matching preorder.
  3. Final Answer:

    void preorder(Node* root) { if(root == nullptr) return; cout << root->data << " "; preorder(root->left); preorder(root->right); } -> Option A
  4. Quick Check:

    Print root before recursive calls for preorder [OK]
Hint: Print root data before recursive calls to fix preorder [OK]
Common Mistakes:
  • Printing after left subtree (inorder)
  • Swapping left and right subtree calls
  • Missing null pointer check
5. You have a binary tree where some nodes have only one child. How does preorder traversal help in serializing this tree uniquely, and which sequence below represents the preorder traversal of this tree?

       8
      / \
     4   10
      \    \
       6    20
hard
A. [8, 10, 20, 4, 6]
B. [4, 6, 8, 10, 20]
C. [8, 4, 6, 10, 20]
D. [6, 4, 8, 20, 10]

Solution

  1. Step 1: Understand preorder traversal for serialization

    Preorder visits root first, then left subtree, then right subtree, capturing structure including nodes with single children.
  2. Step 2: Traverse given tree in preorder

    Visit 8 (root), then left subtree: 4, then 6 (right child of 4), then right subtree: 10, then 20 (right child of 10).
  3. Step 3: Write traversal sequence

    Sequence is [8, 4, 6, 10, 20].
  4. Final Answer:

    [8, 4, 6, 10, 20] -> Option C
  5. Quick Check:

    Preorder captures root-left-right including single children [OK]
Hint: Preorder captures tree shape by visiting root before children [OK]
Common Mistakes:
  • Ignoring nodes with single child
  • Mixing preorder with inorder
  • Visiting right subtree before left
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