Group Binary Tree Nodes by Vertical Column, Top to Bottom and Left to Right
MetaSoftware Engineer · OnsiteLast updated
Return a binary tree's node values grouped by vertical column from left to right, ordering each column top to bottom and breaking ties within a row by left-to-right position. The tree arrives as a level-order list, and the task tests coordinate tracking during traversal and precise tie handling.
Given a binary tree, report its node values column by column. The root is at column 0 and row 0. A left child is one column to the left of its parent (column minus 1), a right child is one column to the right (column plus 1), and each child is one row below its parent.
Return one list per column, from the leftmost column to the rightmost. Within a column, list values from the top row to the bottom row. When two or more nodes share both a row and a column, list them in left-to-right order within that row.
Function Signature
def vertical_columns(tree: list[int | None]) -> list[list[int]]:
Rules
- Input format.
treeis the level-order serialization of the tree.tree[0]is the root; after it, entries are consumed two at a time as the left child and then the right child of each non-null node, in the order those nodes appear.Nonemarks a missing child, children of missing nodes are not listed, and trailingNoneentries may be omitted. An empty list is an empty tree. - Left-to-right order within a row is the order in which nodes of that row appear in the level-order serialization.
- Output one list for each column that contains at least one node; an empty tree returns
[].
Constraints
0 <= number of nodes <= 100-100 <= node value <= 100; values may repeat.
Examples
Example 1
Input: tree = [3, 9, 20, None, None, 15, 7]
Output: [[9], [3, 15], [20], [7]]
Explanation: 9 is at column -1; 3 (row 0) and 15 (row 2, left child of 20) are at column 0; 20 is at column 1; 7 is at column 2.
Example 2
Input: tree = [3, 9, 8, 4, 0, 1, 7]
Output: [[4], [9], [3, 0, 1], [8], [7]]
Explanation: 0 (right child of 9) and 1 (left child of 8) are both at row 2, column 0. Node 0 comes before node 1 in that row, so column 0 is [3, 0, 1].
Example 3
Input: tree = []
Output: []
Solution walkthrough is for members
Get the full walkthrough with reference code and complexity analysis, plus Kitty Coach at 300 messages a day. Hints, the code runner and community answers stay free.