题目地址:
https://www.lintcode.com/problem/closest-binary-search-tree-value/description
给定一棵二叉搜索树,再给定一个浮点数target,问树中离target最近的数是多少。
二分法。先初始化答案为树根,然后比较target与树根的值,如果target比树根小,那么左半边有可能有更优解而右半边不可能(右半边的解只能离target更远),则root向左走;否则向右走。代码如下:
public class Solution {
public int closestValue(TreeNode root, double target) {
int res = root.val;
double diff = Math.abs(root.val - target);
while (root != null) {
if (Math.abs(root.val - target) < diff) {
res = root.val;
diff = Math.abs(root.val - target);
}
if (target < root.val) {
root = root.left;
} else {
root = root.right;
}
}
return res;
}
}
class TreeNode {
int val;
TreeNode left, right;
TreeNode(int x) {
val = x;
}
}
时间复杂度 O ( n ) O(n) O(n)(由于树的形状未知,所以最差复杂度是 O ( n ) O(n) O(n)),空间 O ( 1 ) O(1) O(1)。