Bird
Raised Fist0
DSA Rustprogramming~5 mins

Floor and Ceil in BST in DSA Rust - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the floor of a value in a Binary Search Tree (BST)?
The floor of a value in a BST is the greatest value in the BST that is less than or equal to the given value.
Click to reveal answer
beginner
What is the ceil of a value in a Binary Search Tree (BST)?
The ceil of a value in a BST is the smallest value in the BST that is greater than or equal to the given value.
Click to reveal answer
intermediate
In a BST, if the current node's value is greater than the target, which subtree do you explore to find the floor?
You explore the left subtree because smaller values are on the left, and you want the greatest value less than or equal to the target.
Click to reveal answer
intermediate
In a BST, if the current node's value is less than the target, which subtree do you explore to find the ceil?
You explore the right subtree because larger values are on the right, and you want the smallest value greater than or equal to the target.
Click to reveal answer
beginner
Why is a BST efficient for finding floor and ceil values compared to a normal binary tree?
Because BSTs keep values sorted with smaller values on the left and larger on the right, you can skip large parts of the tree, making search faster.
Click to reveal answer
What does the floor of a value in a BST represent?
AThe greatest value less than or equal to the target
BThe smallest value greater than or equal to the target
CThe root value of the BST
DThe smallest value in the BST
If the current node's value is less than the target, where do you look to find the floor?
ALeft subtree
BRight subtree
CCurrent node only
DBoth subtrees
What is the ceil of a value in a BST?
AThe smallest value greater than or equal to the target
BThe greatest value less than or equal to the target
CThe largest value in the BST
DThe root value
If the current node's value is greater than the target, where do you look to find the ceil?
ABoth subtrees
BRight subtree
CCurrent node only
DLeft subtree
Why is BST preferred for floor and ceil operations?
ABecause it stores values randomly
BBecause it has only two children
CBecause it is sorted and allows skipping subtrees
DBecause it is a balanced tree
Explain how to find the floor of a given value in a BST step-by-step.
Think about comparing node values and choosing left or right subtree.
You got /6 concepts.
    Describe the difference between floor and ceil in a BST and how their search paths differ.
    Focus on how comparisons guide the search direction.
    You got /5 concepts.

      Practice

      (1/5)
      1. What does the floor of a value in a Binary Search Tree (BST) represent?
      easy
      A. The root value of the BST
      B. The smallest value in the BST greater than or equal to the given value
      C. The greatest value in the BST less than or equal to the given value
      D. The average of all values in the BST

      Solution

      1. Step 1: Understand the definition of floor in BST

        The floor of a value is the largest value in the BST that is less than or equal to the given value.
      2. Step 2: Compare with other options

        The smallest value in the BST greater than or equal to the given value describes the ceil, not the floor. Options C and D are unrelated to floor.
      3. Final Answer:

        The greatest value in the BST less than or equal to the given value -> Option C
      4. Quick Check:

        Floor = greatest ≤ value [OK]
      Hint: Floor is largest ≤ value in BST, ceil is smallest ≥ value [OK]
      Common Mistakes:
      • Confusing floor with ceil
      • Thinking floor is the smallest value
      • Assuming floor is always the root
      2. Which Rust function signature correctly represents a function to find the floor value in a BST node structure?
      easy
      A. fn floor(root: &Node, key: i32) -> i32
      B. fn floor(root: &Option, key: i32) -> Option<i32>
      C. fn floor(root: Box<Node>, key: i32) -> i32
      D. fn floor(root: Option<Node>, key: i32) -> Option<i32>

      Solution

      1. Step 1: Analyze Rust ownership and references

        Using &Option allows borrowing the BST root without taking ownership, which is common in tree traversal.
      2. Step 2: Check return type suitability

        Returning Option<i32> is correct because floor may not exist (None). Other options either take ownership or return plain i32 which may cause errors.
      3. Final Answer:

        fn floor(root: &Option, key: i32) -> Option<i32> -> Option B
      4. Quick Check:

        Borrow root & return Option<i32> for floor [OK]
      Hint: Use &Option and Option<i32> for safe BST floor function [OK]
      Common Mistakes:
      • Taking ownership of root causing move errors
      • Returning plain i32 without Option for missing floor
      • Using incorrect parameter types
      3. Given the BST below and key = 14, what is the floor value?
      
             15
            /  \
          10    20
         /  \     \
        8   12    25
      
      medium
      A. 12
      B. 15
      C. 14
      D. 10

      Solution

      1. Step 1: Locate floor for key 14 in BST

        Floor is greatest value ≤ 14. Values ≤ 14 are 8, 10, 12. 15 and above are > 14.
      2. Step 2: Identify the greatest among candidates

        Among 8, 10, 12, the greatest is 12.
      3. Final Answer:

        12 -> Option A
      4. Quick Check:

        Floor(14) = 12 [OK]
      Hint: Floor ≤ key, pick largest smaller value [OK]
      Common Mistakes:
      • Choosing 15 which is greater than key
      • Confusing floor with ceil
      • Picking 10 instead of 12
      4. Consider this Rust function snippet to find ceil in BST:
      
      fn ceil(root: &Option, key: i32) -> Option<i32> {
          match root {
              None => None,
              Some(node) => {
                  if node.val == key {
                      Some(node.val)
                  } else if node.val > key {
                      ceil(&node.left, key)
                  } else {
                      let right_ceil = ceil(&node.right, key);
                      if right_ceil.is_some() {
                          right_ceil
                      } else {
                          Some(node.val)
                      }
                  }
              }
          }
      }
      
      What is the bug in this code?
      medium
      A. It does not recurse on the right subtree when node.val > key
      B. It does not handle the case when left_ceil is None correctly
      C. It should check node.val > key instead of node.val < key
      D. It incorrectly returns floor instead of ceil

      Solution

      1. Step 1: Recall correct ceil recursion logic

        For ceil: when node.val < key recurse right subtree; when node.val > key, recurse left and return left_ceil or node.val.
      2. Step 2: Examine code branches

        Code uses else if node.val > key { ceil(&node.left, key) } (go left when > key) and else (< key) recurse right or node.val. This matches floor logic: go left when > key, right when < key updating candidate.
      3. Step 3: Verify with trace

        In Q3 BST, key=14: path 15(>14) → left 10(<14) → right 12(<14) → None → 12 → 12. Returns 12 (floor), not 15 (ceil).
      4. Final Answer:

        It incorrectly returns floor instead of ceil -> Option D
      5. Quick Check:

        Branches match floor logic [OK]
      Hint: Check recursion direction matches ceil logic [OK]
      Common Mistakes:
      • Confusing floor and ceil logic
      • Misreading recursion branches
      • Assuming missing recursion where none exists
      5. You want to find both floor and ceil of a key in a BST efficiently. Which approach is best to implement in Rust?
      hard
      A. Traverse the BST once, updating floor and ceil candidates during the same recursion
      B. Traverse the BST twice: once for floor and once for ceil separately
      C. Convert BST to sorted array and use binary search twice
      D. Use BFS traversal to find floor and ceil

      Solution

      1. Step 1: Consider efficiency of traversals

        Traversing twice (Traverse the BST twice: once for floor and once for ceil separately) doubles time. Converting to array (Convert BST to sorted array and use binary search twice) adds extra space and time. BFS (Use BFS traversal to find floor and ceil) is not suitable for ordered search.
      2. Step 2: Single traversal updating floor and ceil

        During one recursion, compare node value with key and update floor if node.val ≤ key, update ceil if node.val ≥ key. This is efficient and uses BST properties.
      3. Final Answer:

        Traverse the BST once, updating floor and ceil candidates during the same recursion -> Option A
      4. Quick Check:

        One traversal updating floor & ceil is optimal [OK]
      Hint: Update floor and ceil in one BST traversal [OK]
      Common Mistakes:
      • Doing two separate traversals wasting time
      • Using BFS ignoring BST order
      • Converting BST to array 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