[LeetCode 270] Closest Binary Search Tree Value (easy)

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

Solution

遍历整个数,每个node都与target求一次值差,值差最小的那个就是答案

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int closestValue(TreeNode root, double target) {
        if (root == null) {
            return 0;
        }
        
        if (root.val == target) {
            return root.val;
        }
        
        double[] smallestDiff = { Double.MAX_VALUE };
        int[] result = { root.val };
        
        closestValueHelper (root, smallestDiff, target, result);
        
        return result[0];
    }
    
    private void closestValueHelper (TreeNode root, double[] smallestDiff, double target, int[] result) {
        if (root == null) {
            return;
        }
        
        double diff = Math.abs (root.val - target);
        if (diff < smallestDiff[0]) {
            smallestDiff[0] = diff;
            result[0] = root.val;
        }
        
        closestValueHelper (root.left, smallestDiff, target, result);
        closestValueHelper (root.right, smallestDiff, target, result);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容