Left Side View of Binary Tree in DSA Typescript - Time & Space Complexity
We want to understand how the time needed to find the left side view of a binary tree changes as the tree grows.
How does the number of nodes affect the work done to get the left side view?
Analyze the time complexity of the following code snippet.
function leftSideView(root: TreeNode | null): number[] {
if (!root) return [];
const result: number[] = [];
const queue: (TreeNode | null)[] = [root];
while (queue.length) {
const levelSize = queue.length;
for (let i = 0; i < levelSize; i++) {
const node = queue.shift()!;
if (i === 0) result.push(node.val);
if (node.left) queue.push(node.left);
if (node.right) queue.push(node.right);
}
}
return result;
}
This code finds the left side view by visiting each level of the tree and recording the first node at each level.
- Primary operation: The while loop runs once per level, and the inner for loop visits every node in the tree exactly once.
- How many times: Each node is processed once, so the total number of operations grows with the number of nodes n.
As the number of nodes increases, the code visits each node once, so the work grows directly with the number of nodes.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 visits |
| 100 | About 100 visits |
| 1000 | About 1000 visits |
Pattern observation: The operations increase linearly as the tree size grows.
Time Complexity: O(n)
This means the time to find the left side view grows in direct proportion to the number of nodes in the tree.
[X] Wrong: "Since we only take one node per level, the time complexity is O(height) or O(log n)."
[OK] Correct: Even though we record one node per level, we still visit every node to check their children, so the total work depends on all nodes, not just the levels.
Understanding this helps you explain how breadth-first search visits nodes level by level, a common pattern in tree problems.
What if we changed the code to use recursion instead of a queue? How would the time complexity change?
Practice
Left Side View of a binary tree represent?Solution
Step 1: Understand the view perspective
The left side view shows nodes visible when looking at the tree from the left side.Step 2: Identify visible nodes
Only the first node at each level from the left is visible in this view.Final Answer:
Nodes visible when the tree is viewed from the left side -> Option DQuick Check:
Left side view = nodes visible from left [OK]
- Confusing left side view with right side view
- Thinking it shows all leaf nodes
- Assuming it shows deepest nodes only
Solution
Step 1: Identify correct input type
The function should accept a binary tree root node or null, soTreeNode | nullis correct.Step 2: Identify correct return type
The function returns an array of numbers representing node values visible from the left side.Final Answer:
function leftSideView(root: TreeNode | null): number[] -> Option BQuick Check:
Input = TreeNode or null, Output = number array [OK]
- Using array of numbers as input instead of tree node
- Returning void instead of array
- Using wrong input type like string
1
/ \
2 3
\ \
4 5Consider the TypeScript code:
console.log(leftSideView(root));Solution
Step 1: Identify nodes visible from left at each level
Level 1: Node 1 is visible.
Level 2: Node 2 is the leftmost node.
Level 3: Node 4 is visible from left (child of 2).Step 2: Collect visible nodes in order
The left side view nodes are [1, 2, 4].Final Answer:
[1, 2, 4] -> Option AQuick Check:
Left side nodes = [1, 2, 4] [OK]
- Choosing right child nodes instead of left
- Including nodes not visible from left
- Confusing order of nodes
function leftSideView(root: TreeNode | null): number[] {
const result: number[] = [];
function dfs(node: TreeNode | null, level: number) {
if (!node) return;
if (result.length === level) {
result.push(node.val);
}
dfs(node.right, level + 1);
dfs(node.left, level + 1);
}
dfs(root, 0);
return result;
}Solution
Step 1: Analyze traversal order
The code visits the right child before the left child, so it records right side nodes first.Step 2: Understand impact on left side view
Because right nodes are visited first, left side nodes at each level may be skipped, causing incorrect output.Final Answer:
The function visits right child before left, so left side nodes are missed -> Option CQuick Check:
Visit left child first for correct left side view [OK]
- Visiting right child before left child
- Forgetting base case (though present here)
- Not pushing node values at correct level
Solution
Step 1: Understand traversal types and their suitability
Level order traversal (BFS) visits nodes level by level, making it easy to pick the first node at each level.Step 2: Evaluate other traversal methods
In-order and post-order traversals do not guarantee level-wise order. Right-to-left iterative traversal misses left side nodes.Final Answer:
Use level order traversal (BFS) and pick the first node at each level -> Option AQuick Check:
BFS level order = best for left side view [OK]
- Using in-order or post-order which don't give level order
- Traversing right to left instead of left to right
- Ignoring level boundaries in traversal
Ready to prove it?
Pass the test and this pattern moves unknown
