1. 程式人生 > 其它 >二叉搜尋樹中最接近的值——lintcode900

二叉搜尋樹中最接近的值——lintcode900

二叉搜尋樹中最接近的值

題目:二叉搜尋樹中最接近的值

給一棵非空二叉搜尋樹以及一個target值,找到在BST中最接近給定值的節點值

示例:

輸入: root = {5,4,9,2,#,8,10} and target = 6.124780
輸出: 5
解釋:
二叉樹 {5,4,9,2,#,8,10},表示如下的樹結構:
        5
       / \
     4    9
    /    / \
   2    8  10

題解:分治法

方法1:遞迴實現

public class Solution {
    double minDValue;
    int result;
    public void dfs(TreeNode root, double target)
    {
        if(root==null) return;
        double divide=Math.abs(root.val-target);
        if(divide< minDValue){
            minDValue =divide;
            result=root.val;
        }
        if(target<root.val) dfs(root.left, target);
        else dfs(root.right, target);
    }
    public int closestValue(TreeNode root, double target) {
        minDValue=Double.MAX_VALUE;
        dfs(root, target);
        return result;
    }
}

方法2:非遞迴實現

public class Solution0 {

    public int closestValue(TreeNode root, double target) {
        double minDValue=Double.MAX_VALUE;
        int result=0;

        while (root!=null)
        {
            double divide=Math.abs(target-root.val);
            if(divide<minDValue){
                minDValue=divide;
                result=root.val;
            }
            if(target<root.val) {
                root=root.left;
            }else {
                root=root.right;
            }
        }
        return result;
    }
}