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.
利用二分搜索树的特点(左<根<右)来快速定位,由于根节点是中间值,我们在往下遍历时,我们根据目标值和根节点的值大小关系来比较,如果目标值小于节点值,则我们应该找更小的值,于是我们到左子树去找,反之我们去右子树找
递归:
class ClosetValue {
public int closetValue(TreeNode root, double target) {
int a = root.val;
TreeNode t = target < a ? root.left : root.right;
if (t == null) {
return a;
}
int b = closetValue(t, target);
return Math.abs(a - target) < Math.abs(b - target) ? a : b;
}
}
迭代:
public class ClosetValue {
public int closetValue(TreeNode root, double target) {
int res = root.val;
while (root != null) {
if (Math.abs(res - target) >= Math.abs(root.val - target)) {
res = root.val;
}
root = target < root.val ? root.left : root.right;
}
return res;
}
}