leetcode270. 最接近的二叉搜索树值(java)

*问题描述:
*给定一个不为空的二叉搜索树和一个目标值 target,请在该二叉搜索树中找到最接近目标值 target 的数值。

注意:

给定的目标值 target 是一个浮点数
题目保证在该二叉搜索树中只会存在一个最接近目标值的数
示例:
输入: root = [4,2,5,1,3],目标值 target = 3.714286

在这里插入图片描述输出: 5
**思路:***先遍历求绝对值保存map,然后求最小的可以,最后求其value
上代码拿去即可运行
在这里插入代码片

package com.onlyqi.upup01.leetcode;

public class TreeNode {
private TreeNode LefTreeNode;
private TreeNode RightNode;
private Integer value;

public TreeNode() {
}

public TreeNode(TreeNode lefTreeNode, TreeNode rightNode, Integer value) {
    LefTreeNode = lefTreeNode;
    RightNode = rightNode;
    this.value = value;
}
public TreeNode( Integer value) {
    this.value = value;
}

public TreeNode getLefTreeNode() {
    return LefTreeNode;
}

public void setLefTreeNode(TreeNode lefTreeNode) {
    LefTreeNode = lefTreeNode;
}

public TreeNode getRightNode() {
    return RightNode;
}

public void setRightNode(TreeNode rightNode) {
    RightNode = rightNode;
}

public Integer getValue() {
    return value;
}

public void setValue(Integer value) {
    this.value = value;
}

}

package com.onlyqi.upup01.tree;

import com.onlyqi.upup01.leetcode.TreeNode;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class Test02 {
    
    
    public static void main(String[] args) {
    
    
        TreeNode treeNode1 = new TreeNode(1);
        TreeNode treeNode2 = new TreeNode(2);
        TreeNode treeNode3 = new TreeNode(3);
        TreeNode treeNode4 = new TreeNode(4);
        TreeNode treeNode5 = new TreeNode(5);
        treeNode5.setLefTreeNode(treeNode4);
        treeNode2.setLefTreeNode(treeNode1);
        treeNode3.setLefTreeNode(treeNode2);
        treeNode3.setRightNode(treeNode5);

        System.out.println(find(4.95, treeNode3));
    }

    static Integer find(Double x, TreeNode treeNode) {
    
    
        Map<Double, Integer> targetMap = new HashMap<>();
        while (treeNode != null) {
    
    
            if (x < treeNode.getValue()) {
    
    
                targetMap.put(Math.abs(treeNode.getValue() - x), treeNode.getValue());
                treeNode = treeNode.getLefTreeNode();
            } else if (treeNode.getValue() < x) {
    
    
                targetMap.put(Math.abs(treeNode.getValue() - x), treeNode.getValue());
                // 比根结点大,去右子树查找
                treeNode = treeNode.getRightNode();
            }
        }
        Double min = Collections.min(targetMap.keySet());
        return targetMap.get(min);
    }

}

```****


```java
在这里插入代码片

**运行结果

在这里插入图片描述

我要刷100道算法题,第81道**

おすすめ

転載: blog.csdn.net/guoqi_666/article/details/120932126