Table of Contents
Problem Statement :
Closest Binary Search Tree Value Leetcode Solution – Given the root of a binary search tree and a target value, return the value in the BST that is closest to the target.
Example :
Example 1

Input: root = [4,2,5,1,3], target = 3.714286 Output: 4
Example 2
Input: root = [1], target = 4.428571 Output: 1
Constraints :

Explanation :
- Given the root of a binary search tree and a target value.
- We need to return a node value of BST that is closest to the target.
- From Example 1, target = 3.714286, and the nodes with values 3 and 4 are the possible nodes that are closer to the target.
- But the closest node is 4 with the target.
For node 3, closestness=|3.714286 – 3| = 0.714286
For node 4, closestness=|3.714286 – 4| = 0.285714
Observation :
- In the BST all the left child nodes have a value smaller than the parent value, and also, all the right child nodes have a value greater than the parent value.
- If we do an In-order traversal, we can see that the nodes in the BST are sorted in increasing order.
Approach :
- From the above observation, we can iteratively use the Binary Search algorithm.
- We will travel the BST from the root and while traversing we will calculate the closeness of every node with the target.
- If the root value is equal to the target then root.val.
if(root.val==target) return root.val;
- If the root value is smaller than the target then we will go to the right child of the root.
if(root.val<target) root=root.right;
- If the root value is greater than the target then we will go to the left child of the root.
if(root.val>target) root=root.left;
Code for Closest Binary Search Tree Value :
Java Code for Closest Binary Search Tree Value
class Solution {
public int closestValue(TreeNode root, double target) {
double closestValue=Integer.MAX_VALUE;
int closestNode=root.val;
while(root!=null){
if(closestValue>Math.abs(target-root.val)){
closestValue=Math.abs(target-root.val);
closestNode=root.val;
}
if(root.val==target)return root.val;
if(root.val<target){
root=root.right;
}
else if(target<root.val){
root=root.left;
}
}
return closestNode;
}
}C++ Code for Closest Binary Search Tree Value
class Solution {
public:
int closestValue(TreeNode* root, double target) {
double closestValue=INT_MAX;
int closestNode=root->val;
while(root!=NULL){
if(closestValue>abs(target-root->val)){
closestValue=abs(target-root->val);
closestNode=root->val;
}
if(root->val==target)return root->val;
if(root->val<target){
root=root->right;
}
else if(target<root->val){
root=root->left;
}
}
return closestNode;
}
};Complexity Analysis for Closest Binary Search Tree Value Leetcode Solution:
Time Complexity
O(H), since we are going down from root to the leaf.
Space Complexity
O(1), constant space.