Tree Traversal Preorder Root Left Right in DSA C# - Time & Space Complexity
We want to understand how the time needed to visit all nodes in a tree grows as the tree gets bigger.
Specifically, we ask: How does preorder traversal scale with the number of nodes?
Analyze the time complexity of the following code snippet.
public void PreorderTraversal(TreeNode node) {
if (node == null) return;
Console.WriteLine(node.Value); // Visit root
PreorderTraversal(node.Left); // Traverse left subtree
PreorderTraversal(node.Right); // Traverse right subtree
}
This code visits each node in the tree starting from the root, then left child, then right child.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Visiting each node once (printing its value).
- How many times: Exactly once per node, through recursive calls.
As the number of nodes grows, the number of visits grows at the same rate.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 visits |
| 100 | 100 visits |
| 1000 | 1000 visits |
Pattern observation: The work grows linearly with the number of nodes.
Time Complexity: O(n)
This means the time to traverse grows directly in proportion to the number of nodes in the tree.
[X] Wrong: "Preorder traversal takes more time because it visits nodes multiple times."
[OK] Correct: Each node is visited exactly once, so the time grows linearly, not more.
Knowing preorder traversal time helps you explain how tree algorithms scale, a key skill in many coding challenges.
"What if we changed preorder to inorder traversal? How would the time complexity change?"
Practice
Solution
Step 1: Understand preorder traversal definition
Preorder traversal visits the root node first, then recursively visits the left subtree, followed by the right subtree.Step 2: Confirm the visiting order
The visiting order is Root, then Left subtree, then Right subtree.Final Answer:
Root, Left, Right -> Option DQuick Check:
Preorder = Root, Left, Right [OK]
- Confusing preorder with inorder or postorder
- Visiting left subtree before root
- Visiting right subtree before left
Node?Solution
Step 1: Identify typical preorder traversal method signature
Preorder traversal usually processes nodes and does not return a value, so it returns void and takes the root node as parameter.Step 2: Match method signature options
void PreorderTraversal(Node root) matches void return type and takes Node root parameter, which is correct.Final Answer:
void PreorderTraversal(Node root) -> Option AQuick Check:
Traversal method usually void with root parameter [OK]
- Using return type int instead of void
- Not passing root node as parameter
- Using method without parameters
1 / \ 2 3 / \ 4 5
What is the output of a preorder traversal printing node values?
Solution
Step 1: Start preorder traversal at root node 1
Visit root 1 first.Step 2: Traverse left subtree of 1
Visit node 2, then its left child 4, then right child 5.Step 3: Traverse right subtree of 1
Visit node 3.Final Answer:
[1, 2, 4, 5, 3] -> Option CQuick Check:
Preorder visits root, left subtree, right subtree [OK]
- Mixing preorder with inorder or postorder output
- Visiting left subtree after right subtree
- Skipping leaf nodes
void Preorder(Node root) {
if (root == null) return;
Preorder(root.Left);
Console.Write(root.Value + " ");
Preorder(root.Right);
}What is the error in this code?
Solution
Step 1: Analyze the visiting order in the method
The method calls Preorder on left child first, then prints root value, then calls Preorder on right child.Step 2: Compare with preorder definition
Preorder requires visiting root first, then left, then right. This code visits left subtree before root, so it is actually inorder traversal.Final Answer:
It visits left subtree before root, so not preorder -> Option BQuick Check:
Preorder must print root before children [OK]
- Printing after left subtree call instead of before
- Confusing preorder with inorder traversal
- Missing null check (though present here)
Solution
Step 1: Understand preorder traversal collection
Preorder means visit root first, so add root value to list before recursive calls.Step 2: Check order of recursive calls
After adding root, recursively traverse left subtree, then right subtree.Final Answer:
Code snippet that adds root value first, then left, then right -> Option AQuick Check:
Preorder = Add root, then left, then right [OK]
- Adding node value after left subtree call (inorder)
- Adding node value after both subtree calls (postorder)
- Swapping left and right subtree calls
Ready to prove it?
Pass the test and this pattern moves unknown
