Given a non-empty binary search tree and a target value, find the value in the BST that is closest to the target.
Note:
Given target value is a floating point.
You are guaranteed to have only one unique value in the BST that is closest to the target.
Example:
Input: root = [4,2,5,1,3], target = 3.714286
4
/ \
2 5
/ \
1 3
Output: 4
Solution
遍历整个数,每个node都与target求一次值差,值差最小的那个就是答案
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int closestValue(TreeNode root, double target) {
if (root == null) {
return 0;
}
if (root.val == target) {
return root.val;
}
double[] smallestDiff = { Double.MAX_VALUE };
int[] result = { root.val };
closestValueHelper (root, smallestDiff, target, result);
return result[0];
}
private void closestValueHelper (TreeNode root, double[] smallestDiff, double target, int[] result) {
if (root == null) {
return;
}
double diff = Math.abs (root.val - target);
if (diff < smallestDiff[0]) {
smallestDiff[0] = diff;
result[0] = root.val;
}
closestValueHelper (root.left, smallestDiff, target, result);
closestValueHelper (root.right, smallestDiff, target, result);
}
}