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.
和solution思路大致相同,都是二分查找,但是solution简洁一些
mine
public int closestValue(TreeNode root, double target) {
double mid = Math.abs(target-root.val);
int val = find(root, target);
double diff = Math.abs(target-val);
if(mid < diff) return root.val;
return val;
}
private int find(TreeNode root, double target) {
if (root.left == null && root.right == null) return root.val;
if (target < root.val && root.left != null) return closestValue(root.left, target);
if (target > root.val && root.right != null) return closestValue(root.right, target);
return root.val;
}
solution
public int closestValue(TreeNode root, double target) {
int a = root.val;
TreeNode kid = target < a ? root.left : root.right;
if (kid == null) return a;
int b = closestValue(kid, target);
return Math.abs(a - target) < Math.abs(b - target) ? a : b;
}