`

Find the 'closest' value in a BST with a given value M

 
阅读更多

原创转载请注明出处:http://agilestyle.iteye.com/blog/2361956

 

Question:

Find the 'closest' value in a BST with a given value M

 

Analysis:

1. Traditional Binary Search Tree searching M: O(logN) time to return found M or not 

2. "closest" value in BST to M: A particular value in the BST tree so that Math.abs(value-M) should be minimal 

 

Solution:

1. Keep track of the whole searching path to find M and the diff between each value and M

2. Find the value where Math.abs(value-M) is minimal

3. Return min_diff+M as the returned value

 

package org.fool.java.test;

public class FindClosestInBSTTest {

    public static void main(String[] args) {
        //          100
        //     50        200
        //  10    40  150   300
        Tree myTree = new Tree(100);
        myTree.left = new Tree(50);
        myTree.right = new Tree(200);
        myTree.left.left = new Tree(10);
        myTree.left.right = new Tree(40);
        myTree.right.left = new Tree(150);
        myTree.right.right = new Tree(300);

        System.out.println(getCloset(myTree, 120));
        System.out.println(getCloset(myTree, 80));
        System.out.println(getCloset(myTree, 1000));
        System.out.println(getCloset(myTree, 0));
    }

    private static int getCloset(Tree t, int v) {
        return minDiff(t, v) + v;
    }

    private static int minDiff(Tree t, int v) {
        if (t == null) {
            return Integer.MAX_VALUE;
        }

        if (t.value < v) {
            return smallDiff(t.value - v, minDiff(t.right, v));
        } else {
            return smallDiff(t.value - v, minDiff(t.left, v));
        }
    }

    private static int smallDiff(int a, int b) {
        if (Math.abs(a) > Math.abs(b)) {
            return b;
        }

        return a;
    }

    private static class Tree {
        public int value;
        public Tree left;
        public Tree right;

        public Tree(int value) {
            this.value = value;
            this.left = null;
            this.right = null;
        }
    }
}

Console Output


 

Reference

https://www.youtube.com/watch?v=NMdMIrHEA1E&index=37&list=PLlhDxqlV_-vkak9feCSrnjlrnzzzcopSG

 

  • 大小: 12.5 KB
分享到:
评论

相关推荐

    java-leetcode题解之Closest Leaf in a Binary Tree.java

    java java_leetcode题解之Closest Leaf in a Binary Tree.java

    计算机网络第六版答案

    In these systems, packets are transmitted over the same wireless infrastructure used for cellular telephony, with the base station thus being managed by a telecommunications provider. This provides ...

    a project model for the FreeBSD Project.7z

    This, combined with the vast amount of dependencies in the kernel and that it is not easy to see all the consequences of a kernel change, demands developers with a relative full understanding of the ...

    FlexGraphics_V_1.79_D4-XE10.2_Downloadly.ir

    - FIX: The value of some string flex-properties that began with a parenthese or curly bracket had no apostrophe at the end; that caused an error when reading. (fixed TPropList.SavePropValue for the ...

    Agile Project Management with Scrum

    When teams understand and commit to delivering business value for their customers, when they are free to figure out how to perform tasks, and when they are given the resources they need, they will ...

    Agile.Project.Management.with.Scrum

    When teams understand and commit to delivering business value for their customers, when they are free to figure out how to perform tasks, and when they are given the resources they need, they will ...

    Closest Point Search in Lattices

    这篇文章的标题为《Closest Point Search in Lattices》,即“格点中的最近点搜索”。格点是由一组线性独立的向量构成的,在数学中,特别是在几何、编码理论、密码学等领域有着广泛的应用。文章内容涵盖了对于没有...

    Matlab有限元网格化源程序-ddd.m

    Matlab有限元网格化源程序-ddd.m MIT的人写的论文,一个简单的有限元网格化方法 确实可以用,但是我理解...• Additional parameters to the functions fd and fh can be given in the last arguments varargin .

    Matlab有限元网格化源程序-huniform.m

    Matlab有限元网格化源程序-huniform.m MIT的人写的论文,一个简单的有限元网格化方法 ...• Additional parameters to the functions fd and fh can be given in the last arguments varargin .

    Matlab有限元网格化源程序-dcircle.m

    Matlab有限元网格化源程序-dcircle.m MIT的人写的论文,一个简单的有限元网格化方法 ...• Additional parameters to the functions fd and fh can be given in the last arguments varargin .

    Matlab有限元网格化源程序-distmesh2d.m

    Matlab有限元网格化源程序-distmesh2d.m MIT的人写的论文,一个简单的有限元网格化方法 ...• Additional parameters to the functions fd and fh can be given in the last arguments varargin .

    Web.Client.Programming.with.Perl.Automating.Tasks.on.the.Web.pdf

    The World Wide Web has been credited with bringing the Internet to the masses. The Internet was previously the stomping ground of academics and a small, elite group of computer professionals, mostly...

    NX二次开发UF-EVALSF-find-closest-point 函数介绍

    NX二次开发UF_EVALSF_find_closest_point 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的...

    NX二次开发UF-EVALSF-find-closest-point-2 函数介绍

    NX二次开发UF_EVALSF_find_closest_point_2 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的...

    k-nearest-neighbors-from-global-to-local

    In its basic form, given a new instance, the algorithm finds the \( k \) closest instances (neighbors) in the training set and assigns a label based on the majority vote or a weighted average of the ...

    CalculatingPointTriDistance.zip_The Given

    Calculate the distance of a given point P from a triangle TRI. Point P is a row vector of the form 1x3. The triangle is a matrix formed by three rows of points TRI = [P1 P2 P3] each of size 1x3. dist ...

    A Fast ICP Algorithm for 3-D.pdf

    to-fine manner and employs the four neighboring closest data points in the upper layer to make the search region for finding the closest data point corresponding to a model point in the lower layer....

    3heuristic-search.4.pdf

    of the path from a given node to the closest goal state. Must be zero if node represents a goal state. -Example: Straight-line distance from current location to the goal location in a road navigation ...

Global site tag (gtag.js) - Google Analytics