Coding questions · Uber
Build a Quadtree and Analyze a Graph
This question evaluates skills in spatial data structures and recursive tree construction (building a quadtree) as well as graph analysis using traversal and cycle/safety detection to identify nodes that necessarily reach terminal nodes.
Solve the following two coding problems.
- Build a quadtree from an image
You are given an N x N matrix of integers representing an image, where N is a power of 2. A quadtree node represents a square region of the image.
- If all values in the region are the same, the node should be a leaf storing that value.
- Otherwise, the node should be an internal node with exactly four children representing the region's:
- top-left quadrant
- top-right quadrant
- bottom-left quadrant
- bottom-right quadrant
Design the quadtree node structure and write a function that builds the quadtree for the input matrix.
- Find nodes that always lead to terminal nodes
You are given a directed graph with nodes labeled from 0 to n - 1, represented as an adjacency list graph, where graph[i] contains all outgoing neighbors of node i.
- A terminal node is a node with no outgoing edges.
- A node is safe if every possible path starting from that node eventually ends at a terminal node.
Return all safe nodes in ascending order.
Build a Quadtree from an Image
Return a nested dictionary quadtree for an N x N matrix where uniform regions become leaves.
Examples
Example 1
Input: ([[1,1],[1,1]],)
Output: {'leaf': True, 'value': 1}
Explanation: Uniform leaf.
Example 2
Input: ([[1,0],[0,1]],)
Output: {'leaf': False, 'children': [{'leaf': True, 'value': 1}, {'leaf': True, 'value': 0}, {'leaf': True, 'value': 0}, {'leaf': True, 'value': 1}]}
Explanation: Four leaf children.
Hints
- Model object-style prompts as arrays or operation streams when needed.
- Handle empty and boundary cases before the main logic.
Eventual Safe Nodes in a Directed Graph
Return all nodes from which every path eventually reaches a terminal node.
Examples
Example 1
Input: ([[1,2],[2,3],[5],[0],[5],[],[]],)
Output: [2, 4, 5, 6]
Explanation: Classic safe nodes example.
Example 2
Input: ([[],[0],[1]],)
Output: [0, 1, 2]
Explanation: All nodes safe.
Hints
- Model object-style prompts as arrays or operation streams when needed.
- Handle empty and boundary cases before the main logic.