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道**

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

only-qi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值