What if you could find the closest number to your target instantly, without checking every single one?
Why Floor and Ceil in BST in DSA C++?
Imagine you have a sorted list of numbers on paper, and you want to find the closest number less than or equal to a target (floor), or the closest number greater than or equal to the target (ceil). Doing this by scanning the list every time is slow and tiring.
Manually scanning a list to find floor or ceil means checking each number one by one. This takes a lot of time if the list is long. It's easy to make mistakes, like missing the closest number or mixing up floor and ceil.
A Binary Search Tree (BST) organizes numbers so you can quickly jump to the part of the tree that might have the floor or ceil. This way, you don't check every number, just a few steps, making it fast and reliable.
int floor = INT_MIN; for (int num : sortedList) { if (num <= target) floor = num; }
int floor = findFloor(root, target);
This lets you quickly find the closest smaller or larger number to any target, enabling fast decisions and searches in sorted data.
When booking a flight, you want the closest cheaper or slightly more expensive ticket than your budget. Floor and ceil in BST help find these prices fast.
Manual search is slow and error-prone for floor and ceil.
BST structure speeds up finding floor and ceil efficiently.
Floor and ceil help find closest smaller or larger values quickly.
Practice
floor of a value in a Binary Search Tree (BST) represent?Solution
Step 1: Understand the definition of floor in BST
The floor of a value is the greatest value in the BST that is less than or equal to the given value.Step 2: Compare with other options
The smallest value in the BST greater than or equal to the given value describes ceil, while the remaining options are unrelated to floor concept.Final Answer:
The greatest value in the BST less than or equal to the given value -> Option AQuick Check:
Floor = greatest ≤ value [OK]
- Confusing floor with ceil
- Thinking floor is the smallest value
- Assuming floor is always the root
Node?Solution
Step 1: Analyze function parameters and return type
The function should take a pointer to the root node and the value to find ceil for, returning an integer ceil value.Step 2: Check each option
int ceilBST(Node* root, int val); matches correct signature: returns int, takes Node* and int. Others have wrong parameter order, missing pointers, or wrong return type.Final Answer:
int ceilBST(Node* root, int val); -> Option DQuick Check:
Correct signature returns int and takes Node* root [OK]
- Passing Node by value instead of pointer
- Wrong parameter order
- Incorrect return type
10
/ \
5 15
/ \
12 20
Solution
Step 1: Locate value 14 in BST context
14 is not in BST. We look for smallest value ≥ 14.Step 2: Check nodes greater than or equal to 14
Nodes ≥14 are 15 and 20. The smallest among these is 15.Final Answer:
15 -> Option BQuick Check:
Ceil(14) = 15 [OK]
- Choosing 12 which is less than 14
- Choosing 20 which is larger but not smallest ≥14
- Confusing floor and ceil
int floorBST(Node* root, int val) {
if (!root) return -1;
if (root->data == val) return root->data;
if (root->data > val) return floorBST(root->left, val);
int floorRight = floorBST(root->right, val);
return (floorRight != -1 && floorRight <= val) ? floorRight : root->data;
}
What is the bug?Solution
Step 1: Understand the floor logic in code
If root->data > val, search left subtree. Else search right subtree and compare.Step 2: Identify incorrect return condition
The code returns root->data if floorRight > val. However, since floorRight is never > val (returns -1 or ≤ val), this never triggers, causing it to return -1 (when right subtree has no floor ≤ val) instead of root->data.Final Answer:
It returns root->data when floorRight is greater than val, which is incorrect -> Option CQuick Check:
Floor must be ≤ val, code returns invalid value [OK]
- Returning values greater than val as floor
- Missing null checks
- Ignoring recursion on left subtree
Solution
Step 1: Identify floor of 7 in BST
Floor is greatest value ≤7. Values ≤7 are 2,4,6. Greatest is 6.Step 2: Identify ceil of 7 in BST
Ceil is smallest value ≥7. Values ≥7 are 8,10,12,14. Smallest is 8.Final Answer:
Floor = 6, Ceil = 8 -> Option AQuick Check:
Floor ≤7 = 6, Ceil ≥7 = 8 [OK]
- Swapping floor and ceil values
- Assuming floor or ceil equals the value if not present
- Choosing values not in BST
Ready to prove it?
Pass the test and this pattern moves unknown
