Two patterns exhaust the space of systematic exploration over a structured search space: depth-first commits to each path before backtracking, and breadth-first sweeps level by level before descending. Every search algorithm is essentially a variant of one or the other, with the choice baked into a single line of code: a stack (LIFO) gives DFS, a queue (FIFO) gives BFS.

The data-structure choice cascades into the algorithm’s character. DFS uses an implicit stack via recursion, fitting divide-and-conquer naturally and using O(depth) memory. BFS uses an explicit queue, fits problems where you want all options at the current frontier, and uses O(width) memory. DFS finds any solution as fast as possible; BFS finds the optimal solution for unweighted graphs (see BFS as Wavefront Propagation for why). Different problem shapes pick different sides: parsing usually goes recursive descent (DFS-like) over table-driven (BFS-like); game AI uses minimax with pruning (DFS) for tactical horizons and Monte Carlo tree search (BFS-like) for strategic exploration; learning theory frames focused practice as DFS-like and broad exposure as BFS-like.

The dichotomy generalizes beyond graphs: anywhere a process has to choose between commitment to a path versus maintaining options, the same trade-off applies. Batch processing is DFS-like (commit to a chunk, finish it, move on); streaming is BFS-like (handle each event at the current level before the next arrives). DFS Edge Classification as Structural Revelation is what you can recover from the depth-first trace, and Graph Search Is O(V+E)-Optimal is the O(V+E) floor both modes share.