Closest Binary Search Tree Value

easy tree bst binary search

Problem

Given the root of a non-empty BST and a target value, return the value in the BST closest to the target.

Inputroot = [4,2,5,1,3], target = 3.714
Output4
Walk: 4 → 5 (3.71 < 5? no, go to right → done at 5 missing? Best closest is 4).

def closest_value(root, target):
    best = root.val
    node = root
    while node:
        if abs(node.val - target) < abs(best - target):
            best = node.val
        node = node.left if target < node.val else node.right
    return best
function closestValue(root, target) {
  let best = root.val, node = root;
  while (node) {
    if (Math.abs(node.val - target) < Math.abs(best - target)) best = node.val;
    node = target < node.val ? node.left : node.right;
  }
  return best;
}
class Solution {
    public int closestValue(TreeNode root, double target) {
        int best = root.val; TreeNode node = root;
        while (node != null) {
            if (Math.abs(node.val - target) < Math.abs(best - target)) best = node.val;
            node = target < node.val ? node.left : node.right;
        }
        return best;
    }
}
int closestValue(TreeNode* root, double target) {
    int best = root->val; auto* node = root;
    while (node) {
        if (abs(node->val - target) < abs(best - target)) best = node->val;
        node = target < node->val ? node->left : node->right;
    }
    return best;
}
Time: O(h) Space: O(1)