*问题描述:
*给定一个不为空的二叉搜索树和一个目标值 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道**