logologo
  • AI Interviewer
  • Features
  • AI Tools
  • FAQs
  • Jobs
logologo

Transform your hiring process with AI-powered interviews. Screen candidates faster and make better hiring decisions.

Useful Links

  • Contact Us
  • Privacy Policy
  • Terms & Conditions
  • Refund & Cancellation
  • About Us

Resources

  • Certifications
  • Topics
  • Collections
  • Articles
  • Services

AI Tools

  • AI Interviewer
  • Xperto AI
  • AI Pre-Screening

Procodebase © 2025. All rights reserved.

Level Up Your Skills with Xperto-AI

A multi-AI agent platform that helps you level up your development skills and ace your interview preparation to secure your dream job.

Launch Xperto-AI

Graph Traversal Techniques

author
Generated by
ProCodebase AI

16/11/2024

Graph Traversal

Sign in to read full article

Graph data structures are powerful tools for representing relationships between objects. When it comes to exploring such structures, two traversal techniques stand out: Depth First Search (DFS) and Breadth First Search (BFS). Each has its own strengths and use cases, and understanding when to use which can dramatically impact the efficiency of your algorithms. Let’s dive into these techniques.

Depth First Search (DFS)

What is DFS?

Depth First Search is a graph traversal algorithm that starts from a root node and explores as far as possible along each branch before backtracking. It utilizes stack data structures (either explicitly as a stack or implicitly via recursion) to keep track of the nodes to visit next.

How DFS Works

  1. Start at the Root: Begin the traversal at the root node (or any arbitrary node in case of a disconnected graph).
  2. Mark the Node: Mark the node as visited.
  3. Explore Depth: Recursively visit each unvisited adjacent node.
  4. Backtrack: If you reach a node that has no unvisited adjacent nodes, backtrack to the last visited node and explore other branches.

Key Characteristics

  • Space Complexity: O(h), where h is the height of the tree.
  • Time Complexity: O(V + E), where V is the number of vertices and E is the number of edges.
  • Implementation: Can be implemented using recursion or an explicit stack.

Example Implementation in Java

import java.util.*; public class Graph { private Map<Integer, List<Integer>> adjacencyList; public Graph() { adjacencyList = new HashMap<>(); } public void addEdge(int source, int destination) { adjacencyList.computeIfAbsent(source, k -> new ArrayList<>()).add(destination); } public void depthFirstSearch(int start) { Set<Integer> visited = new HashSet<>(); dfsHelper(start, visited); } private void dfsHelper(int node, Set<Integer> visited) { if (visited.contains(node)) return; visited.add(node); System.out.print(node + " "); for (int neighbor : adjacencyList.getOrDefault(node, new ArrayList<>())) { dfsHelper(neighbor, visited); } } public static void main(String[] args) { Graph graph = new Graph(); graph.addEdge(1, 2); graph.addEdge(1, 3); graph.addEdge(2, 4); graph.addEdge(2, 5); graph.addEdge(3, 6); System.out.println("DFS starting from node 1:"); graph.depthFirstSearch(1); } }

In this example, we created a simple Graph class that allows us to add edges and perform a depth-first search starting from a specified node. Notice how we use a set to keep track of visited nodes to avoid cycles.

Breadth First Search (BFS)

What is BFS?

Breadth First Search is another graph traversal algorithm, but instead of exploring depth first, it explores all the neighbors at the present depth prior to moving on to nodes at the next depth level. It makes use of a queue to keep track of the nodes for exploration.

How BFS Works

  1. Start at the Root: Begin at the root node.
  2. Mark the Node: Mark the node as visited and enqueue it.
  3. Explore Level by Level: Dequeue a node, visit it (i.e., look at its unvisited neighbors), mark them as visited, and enqueue them.
  4. Repeat: Continue until the queue is empty.

Key Characteristics

  • Space Complexity: O(V) in the worst case (if the graph is very broad).
  • Time Complexity: O(V + E).
  • Implementation: Typically implemented using a queue.

Example Implementation in Java

import java.util.*; public class Graph { private Map<Integer, List<Integer>> adjacencyList; public Graph() { adjacencyList = new HashMap<>(); } public void addEdge(int source, int destination) { adjacencyList.computeIfAbsent(source, k -> new ArrayList<>()).add(destination); } public void breadthFirstSearch(int start) { Set<Integer> visited = new HashSet<>(); Queue<Integer> queue = new LinkedList<>(); visited.add(start); queue.offer(start); while (!queue.isEmpty()) { int node = queue.poll(); System.out.print(node + " "); for (int neighbor : adjacencyList.getOrDefault(node, new ArrayList<>())) { if (!visited.contains(neighbor)) { visited.add(neighbor); queue.offer(neighbor); } } } } public static void main(String[] args) { Graph graph = new Graph(); graph.addEdge(1, 2); graph.addEdge(1, 3); graph.addEdge(2, 4); graph.addEdge(2, 5); graph.addEdge(3, 6); System.out.println("BFS starting from node 1:"); graph.breadthFirstSearch(1); } }

In this BFS example, we also define a simple graph structure but utilize a queue to maintain order and ensure we traverse level by level.

Use Cases for DFS and BFS

  • DFS is best used for problems requiring exhaustive search, such as solving mazes, puzzles, and other similar exploratory tasks, particularly where you might want to find all possible paths or a specific path.
  • BFS, on the other hand, is often applied in scenarios needing the shortest path or minimum distance, like finding the shortest route in a map and level-order traversal of trees.

By comprehensively understanding these traversal techniques, you can better approach graph-related problems in coding interviews and algorithm design challenges. Each has distinct advantages, so the choice between DFS and BFS should be tailored to the specific requirements of your task.

Popular Tags

Graph TraversalDepth First SearchBreadth First Search

Share now!

Like & Bookmark!

Related Collections

  • Top 20 DSA Interview Questions Mastery

    23/09/2024 | DSA

  • Advanced Recursion and Backtracking Problems Using Java

    13/10/2024 | DSA

  • Mastering Bit Manipulation: Unlocking Binary Power

    08/12/2024 | DSA

  • Mastering Arrays : The Basic Data Structure

    06/12/2024 | DSA

  • Advanced String-based Interview Techniques

    15/11/2024 | DSA

Related Articles

  • Unraveling the Maximum Subarray Sum Problem

    15/11/2024 | DSA

  • Smallest Substring Containing All Characters of Another String

    15/11/2024 | DSA

  • Largest Sum Subarray

    06/12/2024 | DSA

  • Heap Operations

    16/11/2024 | DSA

  • Understanding Shortest Path Algorithms

    16/11/2024 | DSA

  • Understanding Bipartite Graphs and Matching Problems in DSA

    16/11/2024 | DSA

  • Sorting Arrays

    06/12/2024 | DSA

Popular Category

  • Python
  • Generative AI
  • Machine Learning
  • ReactJS
  • System Design