Bird
Raised Fist0
DSA Javascriptprogramming~5 mins

DFS Depth First Search on Graph in DSA Javascript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does DFS stand for in graph traversal?
DFS stands for Depth First Search, a method to explore graph nodes by going as deep as possible before backtracking.
Click to reveal answer
beginner
In DFS, what data structure is commonly used to keep track of nodes to visit next?
A stack is used in DFS to keep track of nodes to visit next, either explicitly or via recursion call stack.
Click to reveal answer
beginner
Why do we mark nodes as visited in DFS?
Marking nodes as visited prevents revisiting the same node, avoiding infinite loops and repeated work.
Click to reveal answer
intermediate
What is the order of node visits in DFS on a graph with nodes 1 connected to 2 and 3, starting at 1?
Starting at node 1, DFS visits node 1, then goes deep to node 2, then backtracks and visits node 3.
Click to reveal answer
intermediate
How does DFS differ from BFS in graph traversal?
DFS explores as far as possible along each branch before backtracking, while BFS explores neighbors level by level.
Click to reveal answer
What data structure does DFS use implicitly when implemented recursively?
AHeap
BQueue
CStack
DHash Map
Which of these is NOT a typical step in DFS?
AVisit a node
BMark node as visited
CBacktrack when no unvisited neighbors
DAdd all neighbors to a queue
What happens if you do not mark nodes as visited in DFS on a graph with cycles?
ADFS may enter an infinite loop
BDFS uses less memory
CDFS visits fewer nodes
DDFS finishes faster
Starting DFS at node 1 in a graph 1->2, 1->3, 2->4, which node is visited last?
A1
B3
C2
D4
Which traversal method is better for finding the shortest path in an unweighted graph?
ABFS
BDFS
CBoth are equal
DNeither
Explain how DFS explores nodes in a graph and why it uses a stack or recursion.
Think about going down one path fully before trying others.
You got /3 concepts.
    Describe the difference between DFS and BFS in terms of node visiting order and typical use cases.
    Compare how each method moves through the graph.
    You got /5 concepts.

      Practice

      (1/5)
      1. What does DFS (Depth First Search) do when traversing a graph?
      easy
      A. It only visits nodes connected directly to the start node.
      B. It visits nodes level by level from the start node.
      C. It explores as far as possible along each branch before backtracking.
      D. It randomly visits nodes without any order.

      Solution

      1. Step 1: Understand DFS traversal

        DFS explores a path deeply before moving to another path.
      2. Step 2: Compare with other traversals

        BFS visits nodes level by level, but DFS goes deep first.
      3. Final Answer:

        It explores as far as possible along each branch before backtracking. -> Option C
      4. Quick Check:

        DFS = deep exploration first [OK]
      Hint: DFS goes deep first, BFS goes wide first [OK]
      Common Mistakes:
      • Confusing DFS with BFS
      • Thinking DFS visits nodes randomly
      • Assuming DFS only visits direct neighbors
      2. Which of the following is the correct way to start a DFS function in JavaScript for a graph represented as adjacency list graph?
      easy
      A. function dfs(node, visited = new Set()) {
      B. function dfs(node, visited = []) {
      C. function dfs(node, visited = {}) {
      D. function dfs(node, visited = 0) {

      Solution

      1. Step 1: Identify suitable data structure for visited nodes

        A Set is ideal to track visited nodes efficiently.
      2. Step 2: Check function signature correctness

        Using visited = new Set() initializes visited nodes properly.
      3. Final Answer:

        function dfs(node, visited = new Set()) { -> Option A
      4. Quick Check:

        Use Set for visited nodes [OK]
      Hint: Use Set to track visited nodes in DFS [OK]
      Common Mistakes:
      • Using array or object incorrectly for visited
      • Initializing visited as a number
      • Not initializing visited parameter
      3. Given the graph adjacency list:
      const graph = {
        1: [2, 3],
        2: [4],
        3: [],
        4: []
      };
      
      function dfs(node, visited = new Set()) {
        visited.add(node);
        for (const neighbor of graph[node]) {
          if (!visited.has(neighbor)) {
            dfs(neighbor, visited);
          }
        }
        return Array.from(visited);
      }
      
      console.log(dfs(1));

      What is the output?
      medium
      A. [1, 3, 2, 4]
      B. [1, 4, 2, 3]
      C. [1, 2, 3, 4]
      D. [1, 2, 4, 3]

      Solution

      1. Step 1: Start DFS from node 1

        Visit 1, then neighbors 2 and 3 in order.
      2. Step 2: Visit neighbors recursively

        From 2, visit 4. From 3, no neighbors. Order: 1, 2, 4, 3.
      3. Final Answer:

        [1, 2, 4, 3] -> Option D
      4. Quick Check:

        DFS order = 1,2,4,3 [OK]
      Hint: Follow neighbors deeply before next sibling [OK]
      Common Mistakes:
      • Visiting neighbors in wrong order
      • Confusing BFS order with DFS
      • Not converting Set to array properly
      4. Find the error in this DFS code snippet for graph traversal:
      const graph = {
        1: [2, 3],
        2: [4],
        3: [],
        4: []
      };
      
      function dfs(node, visited = new Set()) {
        visited.add(node);
        for (const neighbor of graph[node]) {
          if (visited.has(neighbor)) {
            dfs(neighbor, visited);
          }
        }
        return visited;
      }
      
      console.log(Array.from(dfs(1)));
      
      medium
      A. The condition should be if (!visited.has(neighbor)) instead of if (visited.has(neighbor))
      B. The visited set should be an array instead
      C. The graph object keys should be strings, not numbers
      D. The function should return an array, not a set

      Solution

      1. Step 1: Check the neighbor visit condition

        It incorrectly calls dfs if neighbor is already visited, causing infinite recursion.
      2. Step 2: Correct the condition

        Change to if (!visited.has(neighbor)) to visit unvisited neighbors only.
      3. Final Answer:

        The condition should be if (!visited.has(neighbor)) instead of if (visited.has(neighbor)) -> Option A
      4. Quick Check:

        Visit only unvisited neighbors [OK]
      Hint: Call DFS only if neighbor not visited [OK]
      Common Mistakes:
      • Calling DFS on already visited nodes
      • Using wrong data structure for visited
      • Returning wrong type from DFS
      5. You want to find if there is a path from node 1 to node 5 in this graph:
      const graph = {
        1: [2, 3],
        2: [4],
        3: [5],
        4: [],
        5: []
      };
      
      function dfs(node, target, visited = new Set()) {
        if (node === target) return true;
        visited.add(node);
        for (const neighbor of graph[node]) {
          if (!visited.has(neighbor)) {
            if (dfs(neighbor, target, visited)) return true;
          }
        }
        return false;
      }
      
      console.log(dfs(1, 5));

      What will be the output and why?
      hard
      A. false, because the visited set is not updated correctly
      B. true, because DFS finds a path 1 -> 3 -> 5
      C. true, because DFS visits all nodes regardless of target
      D. false, because node 5 is not directly connected to 1

      Solution

      1. Step 1: Check DFS path search logic

        DFS returns true immediately when target node is found.
      2. Step 2: Trace path from 1 to 5

        Path exists: 1 -> 3 -> 5, so DFS returns true.
      3. Final Answer:

        true, because DFS finds a path 1 -> 3 -> 5 -> Option B
      4. Quick Check:

        DFS finds path = true [OK]
      Hint: DFS returns true when target found [OK]
      Common Mistakes:
      • Assuming direct connection needed
      • Ignoring early return on target found
      • Not updating visited set properly
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard