0
0
DSA Typescriptprogramming~20 mins

BST Property and Why It Matters in DSA Typescript - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
BST Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of Inserting Nodes in BST
What is the printed state of the BST after inserting the values 10, 5, 15, 3, 7 in that order?
DSA Typescript
class Node {
  value: number;
  left: Node | null = null;
  right: Node | null = null;
  constructor(value: number) {
    this.value = value;
  }
}

class BST {
  root: Node | null = null;

  insert(value: number) {
    const newNode = new Node(value);
    if (!this.root) {
      this.root = newNode;
      return;
    }
    let current = this.root;
    while (true) {
      if (value < current.value) {
        if (!current.left) {
          current.left = newNode;
          return;
        }
        current = current.left;
      } else {
        if (!current.right) {
          current.right = newNode;
          return;
        }
        current = current.right;
      }
    }
  }

  printInOrder(node: Node | null = this.root): string {
    if (!node) return '';
    const left = this.printInOrder(node.left);
    const right = this.printInOrder(node.right);
    return (left ? left + ' -> ' : '') + node.value + (right ? ' -> ' + right : '');
  }
}

const bst = new BST();
bst.insert(10);
bst.insert(5);
bst.insert(15);
bst.insert(3);
bst.insert(7);
console.log(bst.printInOrder());
A3 -> 5 -> 7 -> 10 -> 15
B10 -> 5 -> 3 -> 7 -> 15
C15 -> 10 -> 7 -> 5 -> 3
D5 -> 3 -> 7 -> 10 -> 15
Attempts:
2 left
💡 Hint
Remember that in-order traversal of a BST prints values in sorted order.
🧠 Conceptual
intermediate
1:30remaining
Why BST Property Matters for Search Efficiency
Why does the BST property help in searching for a value efficiently compared to a simple binary tree?
ABecause it stores values in a linked list fashion, making traversal faster.
BBecause it keeps the tree balanced automatically, ensuring minimal height.
CBecause it allows deciding to go left or right at each node based on value comparison, reducing search space.
DBecause it duplicates values to speed up search operations.
Attempts:
2 left
💡 Hint
Think about how the BST property guides the search path.
🔧 Debug
advanced
2:00remaining
Identify the Bug in BST Insert Method
What error will occur when running this insert method in a BST if the BST property is violated by inserting duplicates incorrectly?
DSA Typescript
insert(value: number) {
  const newNode = new Node(value);
  if (!this.root) {
    this.root = newNode;
    return;
  }
  let current = this.root;
  while (true) {
    if (value <= current.value) {
      if (!current.left) {
        current.left = newNode;
        return;
      }
      current = current.left;
    } else {
      if (!current.right) {
        current.right = newNode;
        return;
      }
      current = current.right;
    }
  }
}
AInfinite loop if inserting duplicate values
BSyntaxError due to missing return statement
CTypeError because newNode is undefined
DNo error, duplicates are handled correctly
Attempts:
2 left
💡 Hint
Check what happens when value equals current.value.
Predict Output
advanced
2:30remaining
Output After Deleting a Node with Two Children
Given a BST with nodes 20, 10, 30, 5, 15, 25, 35, what is the in-order traversal after deleting node 20?
DSA Typescript
class Node {
  value: number;
  left: Node | null = null;
  right: Node | null = null;
  constructor(value: number) {
    this.value = value;
  }
}

class BST {
  root: Node | null = null;

  insert(value: number) {
    const newNode = new Node(value);
    if (!this.root) {
      this.root = newNode;
      return;
    }
    let current = this.root;
    while (true) {
      if (value < current.value) {
        if (!current.left) {
          current.left = newNode;
          return;
        }
        current = current.left;
      } else {
        if (!current.right) {
          current.right = newNode;
          return;
        }
        current = current.right;
      }
    }
  }

  findMin(node: Node): Node {
    while (node.left) {
      node = node.left;
    }
    return node;
  }

  delete(value: number, node: Node | null = this.root): Node | null {
    if (!node) return null;
    if (value < node.value) {
      node.left = this.delete(value, node.left);
    } else if (value > node.value) {
      node.right = this.delete(value, node.right);
    } else {
      if (!node.left) return node.right;
      if (!node.right) return node.left;
      const minRight = this.findMin(node.right);
      node.value = minRight.value;
      node.right = this.delete(minRight.value, node.right);
    }
    return node;
  }

  printInOrder(node: Node | null = this.root): string {
    if (!node) return '';
    const left = this.printInOrder(node.left);
    const right = this.printInOrder(node.right);
    return (left ? left + ' -> ' : '') + node.value + (right ? ' -> ' + right : '');
  }
}

const bst = new BST();
[20, 10, 30, 5, 15, 25, 35].forEach(v => bst.insert(v));
bst.delete(20);
console.log(bst.printInOrder());
A5 -> 10 -> 15 -> 20 -> 25 -> 30 -> 35
B5 -> 10 -> 15 -> 25 -> 30 -> 35
C5 -> 10 -> 15 -> 25 -> 20 -> 30 -> 35
D10 -> 15 -> 25 -> 30 -> 35
Attempts:
2 left
💡 Hint
Deleting a node with two children replaces it with the smallest node in the right subtree.
🧠 Conceptual
expert
2:00remaining
Why Maintaining BST Property is Crucial for Tree Operations
Which of the following best explains why maintaining the BST property is essential for operations like search, insert, and delete to work correctly?
ABecause it guarantees the tree is always perfectly balanced, minimizing height.
BBecause it converts the tree into a linked list, simplifying traversal.
CBecause it allows storing duplicate values in both subtrees for faster access.
DBecause it ensures that the left subtree contains only smaller values and the right subtree only larger values, enabling binary search logic.
Attempts:
2 left
💡 Hint
Think about how the BST property guides decision making at each node.