Bird
Raised Fist0
DSA C++programming~10 mins

Two Sum in BST in DSA C++ - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to insert a value into the BST.

DSA C++
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

TreeNode* insertNode(TreeNode* root, int val) {
    if (root == nullptr) {
        return new TreeNode(val);
    }
    if (val < root->val) {
        root->left = insertNode(root->left, [1]);
    } else {
        root->right = insertNode(root->right, val);
    }
    return root;
}
Drag options to blanks, or click blank then click option'
Aval
Broot->val
Cnullptr
Droot
Attempts:
3 left
💡 Hint
Common Mistakes
Using root->val instead of val causes wrong recursion.
Passing nullptr instead of val breaks insertion.
2fill in blank
medium

Complete the code to perform inorder traversal and store values in a vector.

DSA C++
void inorderTraversal(TreeNode* root, std::vector<int>& vals) {
    if (root == nullptr) return;
    inorderTraversal(root->left, vals);
    vals.push_back([1]);
    inorderTraversal(root->right, vals);
}
Drag options to blanks, or click blank then click option'
Aroot->val
Bvals
Croot->left
Droot
Attempts:
3 left
💡 Hint
Common Mistakes
Adding root instead of root->val causes type errors.
Adding root->left instead of root->val adds wrong data.
3fill in blank
hard

Fix the error in the two-pointer search for the target sum in the sorted vector.

DSA C++
bool findTargetSum(const std::vector<int>& vals, int target) {
    int left = 0, right = vals.size() - 1;
    while (left < right) {
        int sum = vals[left] + vals[[1]];
        if (sum == target) return true;
        else if (sum < target) left++;
        else right--;
    }
    return false;
}
Drag options to blanks, or click blank then click option'
Aleft
Btarget
C0
Dright
Attempts:
3 left
💡 Hint
Common Mistakes
Using vals[left] twice causes incorrect sums.
Using vals[0] or vals[target] causes out-of-bounds errors.
4fill in blank
hard

Fill both blanks to complete the function that checks if the BST has two elements summing to target.

DSA C++
bool findTarget(TreeNode* root, int k) {
    std::vector<int> vals;
    inorderTraversal(root, vals);
    int left = 0, right = vals.size() - 1;
    while (left < right) {
        int sum = vals[left] + vals[right];
        if (sum == k) return true;
        else if (sum [1] k) left++;
        else right[2];
    }
    return false;
}
Drag options to blanks, or click blank then click option'
A<
B>
C--
D++
Attempts:
3 left
💡 Hint
Common Mistakes
Using > instead of < in the first blank reverses logic.
Using ++ on right pointer causes infinite loop.
5fill in blank
hard

Fill all three blanks to build a complete two-sum in BST function using inorder traversal and two-pointer technique.

DSA C++
bool findTarget(TreeNode* root, int k) {
    std::vector<int> vals;
    [1](root, vals);
    int left = 0, right = vals.size() - 1;
    while (left < right) {
        int sum = vals[left] + vals[right];
        if (sum == k) return true;
        else if (sum < k) left[2];
        else right[3];
    }
    return false;
}
Drag options to blanks, or click blank then click option'
AinorderTraversal
B++
C--
DinsertNode
Attempts:
3 left
💡 Hint
Common Mistakes
Calling insertNode instead of inorderTraversal.
Using wrong pointer increments causing infinite loops.

Practice

(1/5)
1. What is the main goal of the Two Sum in BST problem?
easy
A. Find the maximum value in a BST
B. Find two nodes in a BST whose values add up to a target sum
C. Count the number of nodes in a BST
D. Check if a BST is balanced

Solution

  1. Step 1: Understand the problem statement

    The problem asks to find if there exist two nodes in a Binary Search Tree (BST) such that their values add up to a given target sum.
  2. Step 2: Identify the goal

    The goal is to check for the existence of such a pair, not to find maximum, count nodes, or check balance.
  3. Final Answer:

    Find two nodes in a BST whose values add up to a target sum -> Option B
  4. Quick Check:

    Two Sum in BST means finding two nodes summing to target [OK]
Hint: Look for two nodes adding to target in BST [OK]
Common Mistakes:
  • Confusing with finding max/min value
  • Thinking it counts nodes instead of pairs
  • Assuming it checks tree balance
2. Which of the following C++ code snippets correctly declares a BST node structure for the Two Sum problem?
easy
A. struct TreeNode { int val; TreeNode left; TreeNode* right; };
B. struct TreeNode { int val; TreeNode left; TreeNode right; };
C. struct TreeNode { int val; TreeNode* left; TreeNode* right; };
D. struct TreeNode { int val; TreeNode* left; TreeNode right; };

Solution

  1. Step 1: Check pointer usage in struct

    In C++, child nodes in a tree are pointers to TreeNode objects, so left and right must be pointers.
  2. Step 2: Validate each option

    struct TreeNode { int val; TreeNode* left; TreeNode* right; }; uses TreeNode* for left and right, which is correct. Options A, B, and C incorrectly use TreeNode without pointers for one or both children.
  3. Final Answer:

    struct TreeNode { int val; TreeNode* left; TreeNode* right; }; -> Option C
  4. Quick Check:

    BST nodes use pointers for children [OK]
Hint: Children in BST nodes are pointers in C++ [OK]
Common Mistakes:
  • Using objects instead of pointers for children
  • Mixing pointer and non-pointer types
  • Forgetting semicolon after struct
3. What is the output of the following code snippet that checks for two sum in BST?
struct TreeNode {
  int val;
  TreeNode* left;
  TreeNode* right;
  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

bool findTarget(TreeNode* root, int k) {
  std::unordered_set<int> seen;
  std::function dfs = [&](TreeNode* node) {
    if (!node) return false;
    if (seen.count(k - node->val)) return true;
    seen.insert(node->val);
    return dfs(node->left) || dfs(node->right);
  };
  return dfs(root);
}

int main() {
  TreeNode* root = new TreeNode(5);
  root->left = new TreeNode(3);
  root->right = new TreeNode(6);
  root->left->left = new TreeNode(2);
  root->left->right = new TreeNode(4);
  root->right->right = new TreeNode(7);
  
  bool result = findTarget(root, 9);
  std::cout << (result ? "true" : "false") << std::endl;
  return 0;
}
medium
A. true
B. false
C. Compilation error
D. Runtime error

Solution

  1. Step 1: Understand the tree and target

    The BST has nodes 5,3,6,2,4,7. The target sum is 9.
  2. Step 2: Trace the DFS and set usage

    DFS visits nodes and checks if (target - current node value) is in the set. For example, when visiting node 6, it checks if 9-6=3 is in set. Node 3 was visited before, so it returns true.
  3. Final Answer:

    true -> Option A
  4. Quick Check:

    3 + 6 = 9 found in BST [OK]
Hint: Check if complement exists in visited nodes set [OK]
Common Mistakes:
  • Assuming no pair exists without checking all nodes
  • Confusing DFS order with BFS
  • Ignoring the use of hash set for complements
4. Identify the bug in the following Two Sum in BST code snippet and select the correct fix:
bool findTarget(TreeNode* root, int k) {
  std::unordered_set<int> seen;
  std::function dfs = [&](TreeNode* node) {
    if (!node) return false;
    if (seen.count(k - node->val)) return true;
    dfs(node->left);
    dfs(node->right);
    seen.insert(node->val);
    return false;
  };
  return dfs(root);
}
medium
A. Insert node->val before recursive calls to children
B. Remove the unordered_set and use a vector instead
C. Change return false to return true at the end
D. Add a null check after inserting node->val

Solution

  1. Step 1: Analyze the order of operations

    The code inserts node->val into the set after recursive calls, so complements are not found when visiting children.
  2. Step 2: Fix the insertion timing

    Insert node->val before recursive calls so that children can find complements in the set.
  3. Final Answer:

    Insert node->val before recursive calls to children -> Option A
  4. Quick Check:

    Insert before recursion to find complements [OK]
Hint: Insert current value before recursion to detect complements [OK]
Common Mistakes:
  • Inserting after recursion causes missed pairs
  • Changing return values incorrectly
  • Replacing set with vector reduces efficiency
5. Given a BST with nodes [10, 5, 15, 3, 7, null, 18], how would you modify the Two Sum in BST algorithm to handle the case where the target sum is twice the value of a single node (e.g., target = 14 and node value = 7)?
hard
A. Only check leaf nodes for pairs
B. Ignore pairs where complement equals current node value
C. Use a sorted array instead of a hash set
D. Check if the complement equals the current node value and ensure the node appears twice

Solution

  1. Step 1: Understand the problem with duplicates

    If target is twice a node's value, we must ensure two distinct nodes with that value exist.
  2. Step 2: Modify algorithm to handle duplicates

    When complement equals current node value, check if the node appears twice (e.g., by counting occurrences or checking different nodes).
  3. Final Answer:

    Check if the complement equals the current node value and ensure the node appears twice -> Option D
  4. Quick Check:

    Handle duplicates by verifying two distinct nodes [OK]
Hint: Verify two distinct nodes if complement equals current value [OK]
Common Mistakes:
  • Ignoring duplicate values causing false positives
  • Skipping pairs with same node value
  • Switching data structures unnecessarily
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