Bird
Raised Fist0
DSA Typescriptprogramming~5 mins

Backtracking Concept and Decision Tree Visualization in DSA Typescript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is backtracking in simple terms?
Backtracking is a way to solve problems by trying out choices one by one, and if a choice doesn't work, going back and trying another until the right solution is found.
Click to reveal answer
beginner
How does a decision tree help in backtracking?
A decision tree shows all possible choices and paths you can take. It helps visualize how backtracking tries each path and goes back when a path fails.
Click to reveal answer
intermediate
In backtracking, what does 'pruning' mean?
Pruning means stopping early on a path that won't lead to a solution, so you don't waste time exploring it further.
Click to reveal answer
intermediate
What is the role of recursion in backtracking?
Recursion helps backtracking by calling the same function repeatedly with different choices, making it easy to explore all paths step by step.
Click to reveal answer
beginner
Why is backtracking useful for problems like puzzles and combinations?
Because it tries all possible options in an organized way and finds solutions without missing any, perfect for puzzles and combinations where many choices exist.
Click to reveal answer
What does backtracking do when it hits a dead end?
AIgnores the dead end and continues
BStops the whole process
CRestarts from the beginning
DGoes back to try a different choice
Which data structure best represents all possible choices in backtracking?
ALinked list
BDecision tree
CStack
DQueue
What is pruning in backtracking?
AAdding more choices
BTrying all paths without skipping
CStopping early on bad paths
DSaving all paths explored
How does recursion help in backtracking?
ABy repeating the same steps with different choices
BBy storing all solutions at once
CBy avoiding any repeated work
DBy sorting the choices
Which problem type is backtracking NOT typically used for?
ASorting numbers quickly
BSolving puzzles
CFinding all combinations
DSearching for paths
Explain how backtracking uses a decision tree to find solutions.
Think about how each branch represents a choice and how backtracking moves through branches.
You got /4 concepts.
    Describe the role of recursion and pruning in making backtracking efficient.
    Consider how recursion helps explore and pruning helps avoid waste.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main idea behind backtracking in algorithms?
      easy
      A. Try all possible options and undo choices when they lead to dead ends
      B. Sort data before processing it
      C. Use loops to repeat actions without conditions
      D. Store data in a fixed-size array

      Solution

      1. Step 1: Understand backtracking approach

        Backtracking tries all possible choices step-by-step and goes back if a choice fails.
      2. Step 2: Compare options with backtracking definition

        Only Try all possible options and undo choices when they lead to dead ends describes trying options and undoing wrong choices, which is backtracking.
      3. Final Answer:

        Try all possible options and undo choices when they lead to dead ends -> Option A
      4. Quick Check:

        Backtracking = Try and undo choices [OK]
      Hint: Backtracking means try, fail, undo, and try again [OK]
      Common Mistakes:
      • Confusing backtracking with sorting
      • Thinking backtracking is just looping
      • Believing backtracking stores fixed data only
      2. Which of the following is the correct TypeScript function signature for a backtracking function that tries to build a string path?
      easy
      A. function backtrack(path: number): string
      B. function backtrack(path: string): void
      C. function backtrack(): number[]
      D. function backtrack(path: boolean): boolean

      Solution

      1. Step 1: Identify expected input and output

        Backtracking often builds a path string and does not return a value, so void return is common.
      2. Step 2: Match signature with backtracking pattern

        function backtrack(path: string): void matches a function taking a string path and returning void, which fits backtracking.
      3. Final Answer:

        function backtrack(path: string): void -> Option B
      4. Quick Check:

        Backtracking function signature = string input, void output [OK]
      Hint: Backtracking functions usually return void and take current path [OK]
      Common Mistakes:
      • Using wrong return types like number or boolean
      • Missing input parameter for current path
      • Confusing return type with output data
      3. Consider this TypeScript backtracking snippet:
      function backtrack(path: string, choices: string[]): void {
        if (path.length === 2) {
          console.log(path);
          return;
        }
        for (const choice of choices) {
          backtrack(path + choice, choices);
        }
      }
      backtrack('', ['A', 'B']);

      What will be printed?
      medium
      A. AA, AB, BA, BB
      B. A, B
      C. AB, BA
      D. AA, BB

      Solution

      1. Step 1: Understand recursion and stopping condition

        The function prints when path length is 2, building strings by adding 'A' or 'B'.
      2. Step 2: Trace all paths of length 2

        Starting empty, choices add 'A' or 'B' twice: 'AA', 'AB', 'BA', 'BB' are printed.
      3. Final Answer:

        AA, AB, BA, BB -> Option A
      4. Quick Check:

        All 2-length combos of A and B printed [OK]
      Hint: Count all 2-letter combos from choices [OK]
      Common Mistakes:
      • Printing only single letters
      • Missing some combinations
      • Confusing order of printed strings
      4. This backtracking code tries to generate all subsets of [1, 2] but has a bug:
      function backtrack(start: number, path: number[], nums: number[]) {
        console.log(path);
        for (let i = start; i < nums.length; i++) {
          path.push(nums[i]);
          backtrack(i, path, nums);
          path.pop();
        }
      }
      backtrack(0, [], [1, 2]);

      What is the bug?
      medium
      A. start should be initialized to 1
      B. path.pop() is missing to undo choice
      C. Console.log should be after the loop
      D. Recursive call should use i + 1 instead of i to avoid duplicates

      Solution

      1. Step 1: Analyze recursive call parameter

        The call uses backtrack(i, ...) which reuses the same index, causing repeated subsets.
      2. Step 2: Fix recursion to avoid duplicates

        Changing to backtrack(i + 1, ...) moves forward, preventing duplicates and infinite loops.
      3. Final Answer:

        Recursive call should use i + 1 instead of i to avoid duplicates -> Option D
      4. Quick Check:

        Advance index in recursion = i + 1 [OK]
      Hint: Use i + 1 in recursion to move forward [OK]
      Common Mistakes:
      • Not advancing index causing infinite recursion
      • Removing path.pop() causing wrong subsets
      • Misplacing console.log outside recursion
      5. You want to use backtracking to find all 3-letter strings from letters ['X', 'Y', 'Z'] but without repeating the same letter consecutively. Which change to this code snippet enforces that?
      function backtrack(path: string, letters: string[]) {
        if (path.length === 3) {
          console.log(path);
          return;
        }
        for (const letter of letters) {
          // What condition to add here?
          backtrack(path + letter, letters);
        }
      }
      backtrack('', ['X', 'Y', 'Z']);
      hard
      A. Add: if (path.length < 3) before recursive call
      B. Add: if (letter !== 'X') before recursive call
      C. Add: if (path.length === 0 || path[path.length - 1] !== letter) before recursive call
      D. Add: if (path.includes(letter)) before recursive call

      Solution

      1. Step 1: Understand the no consecutive repeat rule

        We must skip adding a letter if it matches the last letter in path.
      2. Step 2: Write condition to check last letter

        Condition if path is empty or last letter differs from current letter ensures no repeats.
      3. Final Answer:

        Add: if (path.length === 0 || path[path.length - 1] !== letter) before recursive call -> Option C
      4. Quick Check:

        Check last letter before adding new letter [OK]
      Hint: Check last letter to avoid consecutive repeats [OK]
      Common Mistakes:
      • Filtering letters incorrectly by fixed letter
      • Checking only path length without letter comparison
      • Using includes() which disallows all repeats
      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