题目描述:
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
利用递归遍历二叉树,根据节点值的大小和目标值比较,判断遍历的方向。
class Solution {
public:
int closestValue(TreeNode* root, double target) {
int result=root->val;
traversal(root, target, result);
return result;
}
void traversal(TreeNode* root, double target, int& result)
{
if(root==NULL) return;
if(abs(result-target)>abs(root->val-target)) result=root->val;
if(root->val>target) traversal(root->left, target, result);
else if(root->val<target) traversal(root->right, target, result);
else return;
}
};
采用迭代的方法,维持一个指针,从根节点开始,根据节点值的大小和目标值比较来移动指针,从而决定遍历方向。
class Solution {
public:
int closestValue(TreeNode* root, double target) {
int result=root->val;
while (root)
{
if(abs(result-target)>=abs(root->val-target))
result=root->val;
if(target<root->val) root=root->left;
else if(target>root->val) root=root->right;
else if(target==root->val) return root->val;
}
return result;
}
};