- Closest Binary Search Tree Value
中文English
Given a non-empty binary search tree and a target value, find the value in the BST that is closest to the target.
Example
Example1
Input: root = {5,4,9,2,#,8,10} and target = 6.124780
Output: 5
Example2
Input: root = {3,2,4,1} and target = 4.142857
Output: 4
Notice
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.
解法1:
InOrder Traversal。
注意: target是double,要注意转换!
代码如下:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: the given BST
* @param target: the given target
* @return: the value in the BST that is closest to the target
*/
int closestValue(TreeNode * root, double target) {
if (!root) return 0;
minGap = (double)INT_MAX;
result = root->val;
inOrderTraversal(root, target);
return result;
}
private:
void inOrderTraversal(TreeNode * root, double target) {
if (!root) return;
inOrderTraversal(root->left, target);
double gap = abs((double)root->val - target);
if (gap < minGap) {
minGap = gap;
result = root->val;
}
inOrderTraversal(root->right, target)
; }
int result;
double minGap;
};