Coding Interview PatternsVertical Order Traversal of a Binary Tree
HardTree Breadth-First Search

Vertical Order Traversal of a Binary Tree

Explanation & Solution

Description

Given the root of a binary tree, calculate the vertical order traversal of the binary tree.

For each node at position (row, col), its left and right children will be at positions (row + 1, col - 1) and (row + 1, col + 1) respectively. The root of the tree is at (0, 0).

The vertical order traversal of a binary tree is a list of top-to-bottom orderings for each column index starting from the leftmost column and ending on the rightmost column. There may be multiple nodes in the same row and same column. In such a case, sort these nodes by their values.

Return the vertical order traversal of the binary tree.

Examples

Example 1:

```tree

[3, 9, 20, null, null, 15, 7]

`

Input:root = [3, 9, 20, null, null, 15, 7]
0
3
1
9
2
20
3
null
4
null
5
15
6
7

Output: [[9], [3, 15], [20], [7]]

Explanation:

  • Column -1: Only node 9 is in this column.
  • Column 0: Nodes 3 and 15 are in this column in that order from top to bottom.
  • Column 1: Only node 20 is in this column.
  • Column 2: Only node 7 is in this column.

Example 2:

```tree

[1, 2, 3, 4, 5, 6, 7]

`

Input:root = [1, 2, 3, 4, 5, 6, 7]
0
1
1
2
2
3
3
4
4
5
5
6
6
7

Output: [[4], [2], [1, 5, 6], [3], [7]]

Explanation:

  • Column -2: Only node 4.
  • Column -1: Only node 2.
  • Column 0: Nodes 1, 5, and 6. Nodes 5 and 6 are at the same position (row 2, col 0), so they are sorted by value: [5, 6].
  • Column 1: Only node 3.
  • Column 2: Only node 7.

Example 3:

```tree

[1, 2, 3, 4, 6, 5, 7]

`

Input:root = [1, 2, 3, 4, 6, 5, 7]
0
1
1
2
2
3
3
4
4
6
5
5
6
7

Output: [[4], [2], [1, 5, 6], [3], [7]]

Explanation: Same as Example 2 but nodes 5 and 6 are swapped in the tree. They still end up at position (row 2, col 0) and are sorted by value.

Constraints

  • The number of nodes in the tree is in the range [1, 1000]
  • 0 <= Node.val <= 1000

Approach

Tree Breadth-First Search pattern

1. Base Case

  • If root is null:
  • Return []

2. BFS with Position Tracking

  • Create an entries array to store { val, row, col } for each node
  • Create a queue initialized with { node: root, row: 0, col: 0 }
  • Process the queue:
  • For each item, record its value, row, and column
  • Enqueue left child with (row + 1, col - 1)
  • Enqueue right child with (row + 1, col + 1)

3. Sort Entries

  • Sort all entries by:

1. Column (left to right)

2. Row (top to bottom)

3. Value (ascending, for tie-breaking same position)

4. Group by Column

  • Iterate through sorted entries
  • Group consecutive entries with the same column into sub-arrays
  • Push each group into the result

5. Return Result

  • The result is an array of arrays, each representing one vertical column

Key Insight

  • BFS collects all nodes with their (row, col) positions
  • The triple sort (col, row, val) ensures correct vertical order with proper tie-breaking
  • Nodes at the same position are sorted by value as required
Time
O(n log n)dominated by sorting
Space
O(n)for storing entries and the queue

Visualization

Input:
DFS Traversal[3, 9, 20, 15, 7]
3920157
output0

Press play to start DFS traversal

CurrentIn stackComplete
11 steps

Solution Code