[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);
    }
}

你可能感兴趣的:([LeetCode 270] Closest Binary Search Tree Value (easy))