给一棵非空二叉搜索树以及一个target值,找到在BST中最接近给定值的节点值
样例
样例1
输入: root = {5,4,9,2,#,8,10} and target = 6.124780
输出: 5
解释:
二叉树 {5,4,9,2,#,8,10},表示如下的树结构:
5
/ \
4 9
/ / \
2 8 10
样例2
输入: root = {3,2,4,1} and target = 4.142857
输出: 4
解释:
二叉树 {3,2,4,1},表示如下的树结构:
3
/ \
2 4
/
1
注意事项
- 给出的目标值为浮点数
- 我们可以保证只有唯一一个最接近给定值的节点
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
void myprint(int& x)
{
cout<<x<<" ";
}
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
*/
vector<int> num;
int closestValue(TreeNode * root, double target) {
// write your code here
bianli(root);
double mymin = INT_MAX;
int ret = 0;
for(int i = 0; i < num.size(); i++)
{
if(fabs(target-num[i]) < mymin)
{
//cout<<"1"<<endl;
mymin = fabs(target-num[i]);
ret = num[i];
}
}
return ret;
}
void bianli(TreeNode * root)
{
if(root != NULL)
{
num.push_back(root->val);
bianli(root->left);
bianli(root->right);
}
}
};