Bird
Raised Fist0
DSA Rustprogramming~5 mins

BST Search Operation in DSA Rust - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a Binary Search Tree (BST)?
A Binary Search Tree is a tree data structure where each node has at most two children. For every node, all values in the left subtree are smaller, and all values in the right subtree are larger than the node's value.
Click to reveal answer
beginner
How does the search operation work in a BST?
Start at the root. If the value matches the node, return it. If the value is smaller, search the left subtree. If larger, search the right subtree. Repeat until found or reach a leaf.
Click to reveal answer
intermediate
What is the time complexity of searching in a BST?
The average time complexity is O(log n) when the tree is balanced. In the worst case (unbalanced), it can be O(n).
Click to reveal answer
beginner
What happens if the search value is not in the BST?
The search will reach a null (empty) child pointer, indicating the value is not present in the tree.
Click to reveal answer
beginner
Show a simple Rust function signature for BST search.
fn search(root: &Option, value: i32) -> bool
Click to reveal answer
In a BST, if the search value is less than the current node's value, where do you search next?
ALeft subtree
BRight subtree
CCurrent node
DRoot node
What is the best case time complexity of searching in a balanced BST?
AO(n)
BO(log n)
CO(1)
DO(n log n)
If the search value is not found in the BST, what will the search function return?
AThe root node
BThe closest larger value
CThe closest smaller value
DNull or false
Which data structure property helps BST search be efficient?
ANodes have multiple parents
BLeft child values are smaller, right child values are larger
CAll nodes have the same value
DNodes are stored in a linked list
In Rust, what type is commonly used to represent a BST node's child?
AOption<Box<Node>>
BHashMap<Node>
CVec<Node>
DRc<Node>
Explain step-by-step how to search for a value in a Binary Search Tree.
Think about how the BST property guides the search direction.
You got /6 concepts.
    Describe how the structure of a BST affects the efficiency of the search operation.
    Consider how the shape of the tree changes search steps.
    You got /5 concepts.

      Practice

      (1/5)
      1. What does the search operation in a Binary Search Tree (BST) do?
      easy
      A. Counts the number of nodes in the BST
      B. Inserts a new value into the BST
      C. Deletes a value from the BST
      D. Finds whether a given value exists in the BST

      Solution

      1. Step 1: Understand the purpose of BST search

        The search operation checks if a specific value is present in the BST by comparing values and moving left or right accordingly.
      2. Step 2: Differentiate from other BST operations

        Insertion adds new nodes, deletion removes nodes, and counting nodes is a separate operation. Search only checks presence.
      3. Final Answer:

        Finds whether a given value exists in the BST -> Option D
      4. Quick Check:

        Search = Find value [OK]
      Hint: Search checks presence, not insertion or deletion [OK]
      Common Mistakes:
      • Confusing search with insert or delete
      • Thinking search counts nodes
      • Assuming search modifies the tree
      2. Which of the following is the correct Rust function signature for a BST search method that returns a boolean?
      easy
      A. fn search(&mut self, value: i32) -> i32
      B. fn search(value: i32) -> bool
      C. fn search(&self, value: i32) -> bool
      D. fn search(&self, value: i32) -> Option<Node>

      Solution

      1. Step 1: Identify method receiver and return type

        Search should borrow the tree immutably (&self) and return true/false (bool) indicating presence.
      2. Step 2: Check parameters and return correctness

        Value parameter is i32, and return type is bool. Mutable borrow or returning Node is incorrect for simple search.
      3. Final Answer:

        fn search(&self, value: i32) -> bool -> Option C
      4. Quick Check:

        Immutable borrow + bool return = fn search(&self, value: i32) -> bool [OK]
      Hint: Search does not modify tree, so use &self and bool return [OK]
      Common Mistakes:
      • Using &mut self instead of &self
      • Returning Node instead of bool
      • Missing self parameter
      3. Given this Rust code for BST search, what will be printed when searching for 7?
      struct Node {
          value: i32,
          left: Option,
          right: Option,
      }
      
      impl Node {
          fn search(&self, val: i32) -> bool {
              if val == self.value {
                  true
              } else if val < self.value {
                  match &self.left {
                      Some(left_node) => left_node.search(val),
                      None => false,
                  }
              } else {
                  match &self.right {
                      Some(right_node) => right_node.search(val),
                      None => false,
                  }
              }
          }
      }
      
      fn main() {
          let root = Node {
              value: 5,
              left: Some(Box::new(Node { value: 3, left: None, right: None })),
              right: Some(Box::new(Node { value: 8, left: None, right: None })),
          };
          println!("{}", root.search(7));
      }
      medium
      A. false
      B. Runtime panic
      C. Compilation error
      D. true

      Solution

      1. Step 1: Trace search for value 7 starting at root 5

        7 > 5, so search right subtree with root 8.
      2. Step 2: Search right subtree node with value 8 for 7

        7 < 8, so search left subtree of node 8, which is None, so returns false.
      3. Final Answer:

        false -> Option A
      4. Quick Check:

        7 not found in tree = false [OK]
      Hint: Follow BST rules: left < node < right [OK]
      Common Mistakes:
      • Assuming 7 is found because 8 exists
      • Confusing left and right subtree directions
      • Ignoring None case returns false
      4. Identify the bug in this Rust BST search method:
      fn search(&self, val: i32) -> bool {
          if val == self.value {
              true
          } else if val < self.value {
              self.left.as_ref().unwrap().search(val)
          } else {
              self.right.as_ref().unwrap().search(val)
          }
      }
      medium
      A. Using unwrap() without checking if child exists can cause panic
      B. Missing return keyword before recursive calls
      C. Incorrect comparison operators used
      D. Function should return Option<bool> instead of bool

      Solution

      1. Step 1: Analyze use of unwrap() on Option

        unwrap() assumes the Option is Some, but if child is None, it causes runtime panic.
      2. Step 2: Understand safe alternative

        Should check if child exists using match or if let before calling search to avoid panic.
      3. Final Answer:

        Using unwrap() without checking if child exists can cause panic -> Option A
      4. Quick Check:

        unwrap() on None = panic [OK]
      Hint: Never unwrap Option without checking Some first [OK]
      Common Mistakes:
      • Ignoring possibility of None causing panic
      • Thinking unwrap() is safe always
      • Confusing return types
      5. You want to search for a value in a BST that may contain duplicate values on the right subtree. How should you modify the search operation to find if the value exists anywhere in the tree?
      hard
      A. Search left subtree if val <= node, else search right subtree
      B. Search left subtree if val < node, else search both right subtree and current node for val
      C. Search left subtree if val < node, else search right subtree and if not found, search left subtree again
      D. Search both left and right subtrees regardless of comparison, then check current node

      Solution

      1. Step 1: Understand duplicates on right subtree

        Duplicates are stored on the right, so if val equals node value, we found it; else if val > node, search right subtree.
      2. Step 2: Modify search to check current node and right subtree for duplicates

        If val equals node value, return true immediately. If val > node value, search right subtree. If val < node value, search left subtree.
      3. Final Answer:

        Search left subtree if val < node, else search both right subtree and current node for val -> Option B
      4. Quick Check:

        Duplicates on right: check current and right subtree [OK]
      Hint: Check current node before right subtree for duplicates [OK]
      Common Mistakes:
      • Ignoring duplicates on right subtree
      • Searching only one subtree without checking current node
      • Searching left subtree unnecessarily for duplicates
      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