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]
`
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]
`
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]
`
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
rootisnull: - Return
[]
2. BFS with Position Tracking
- Create an
entriesarray to store{ val, row, col }for each node - Create a
queueinitialized 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
Visualization
Press play to start DFS traversal