InterviewStack.io LogoInterviewStack.io

Trees and Graphs Questions

Comprehensive knowledge of tree and graph data structures and algorithms commonly tested in coding interviews. Candidates should understand representations such as adjacency list and adjacency matrix and when to use each, and tree representations including n ary trees and binary search trees. Expect to implement and reason about traversals including depth first search and breadth first search, tree traversals such as pre order in order and post order, and level order traversal. Cover algorithms including topological sorting for directed acyclic graphs, cycle detection, connected components, shortest path algorithms such as breadth first search for unweighted graphs, Dijkstra for nonnegative weights, and Bellman Ford for graphs with negative edges, and minimum spanning tree algorithms such as Kruskal and Prim. Include disjoint set union find for connectivity and for use with Kruskal, lowest common ancestor techniques and implementations, tree dynamic programming problems, serialization and deserialization, reconstruction from traversals, balancing and validation checks for binary search trees and balanced tree concepts, diameter and path sum problems, and common interview patterns such as path finding dependency resolution and structural transformation. Emphasize implementation details and common pitfalls including correct use of visited tracking recursion depth edge cases and disconnected components, and practice articulating time and space complexity tradeoffs and algorithm selection under different constraints.

EasyTechnical
82 practiced
Implement two functions in Python: build_adjacency_list(edges, n) and build_adjacency_matrix(edges, n). edges is a list of tuples (u, v) for an undirected graph with nodes labeled 0..n-1. Return the adjacency list and adjacency matrix respectively. After implementing, discuss time and space complexities and describe scenarios (sparse vs dense graphs) where you would prefer one representation over the other.
MediumTechnical
86 practiced
Implement computation of strongly connected components (SCCs) for a directed graph using either Kosaraju or Tarjan algorithm in Python. Return a list of SCCs (each SCC as a list of nodes). Explain algorithmic tradeoffs and why Tarjan finds SCCs in one DFS while Kosaraju uses two passes.
EasyTechnical
71 practiced
Explain when to use adjacency matrix versus adjacency list representations for graphs. For each representation, describe memory usage and time complexity for operations: checking edge existence, iterating neighbors, and adding/removing edges. Give ML-related examples where a dense matrix is preferable (e.g., spectral methods) and where adjacency list is preferable (e.g., sparse GNNs).
EasyTechnical
70 practiced
Implement has_cycle_undirected(n, edges) in Python to detect if an undirected graph with nodes 0..n-1 contains a cycle. Use adjacency list and a DFS recursion approach. Your implementation must correctly handle disconnected components and avoid false positives due to the immediate parent edge.
MediumTechnical
83 practiced
Given an undirected weighted tree with n nodes and edge list (u, v, w), implement compute_tree_diameter(n, edges) in Python using two BFS/DFS passes (or appropriate weighted variant) and return both the diameter length and the sequence of nodes on that diameter path. Explain why two passes suffice on trees.

Unlock Full Question Bank

Get access to hundreds of Trees and Graphs interview questions and detailed answers.

Sign in to Continue

Join thousands of developers preparing for their dream job.