270. Closest Binary Search Tree Value
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
方法1: recursion
思路;
将递归交给有可能找到更优解的孩子,如果这个孩子已经为空,返回自己。
Complexity
Time complexity: O(h)
Space complexity: O(h)
class Solution {
public:
int closestValue(TreeNode* root, double target) {
if (target == root -> val) return root -> val;
TreeNode * child = target < root -> val ? root -> left : root -> right;
int child_candidate = root -> val;
if (!child){
return root -> val;
}
child_candidate = closestValue(child, target);
if (abs(child_candidate - target) < abs(root -> val - target)){
return child_candidate;
}
else {
return root -> val;
}
}
};
方法2: iterative
思路:
Complexity
Time complexity: O(h)
Space complexity: O(1)
class Solution1 {
public:
int closestValue(TreeNode* root, double target) {
int result = root->val;
while (root){
result = abs(root->val - target) < abs(result - target) ? root->val : result;
if (root->val < target)
root = root ->right;
else
root = root -> left;
}
return result;
}
};