要求
给定一个不为空的二叉搜索树和一个目标值 target,请在该二叉搜索树中找到最接近目标值 target 的数值。
注意:
给定的目标值 target 是一个浮点数
题目保证在该二叉搜索树中只会存在一个最接近目标值的数
示例:
输入: root = [4,2,5,1,3],目标值 target = 3.714286
4
/ \
2 5
/ \
1 3
输出: 4
核心代码
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def closestValue(self, root: Optional[TreeNode], target: float) -> int:
def inorder(node):
if not node:
return []
return inorder(node.left) + [node.val] + inorder(node.right)
nums = inorder(root)
res = root.val
minum = 2 ** 32
for i,x in enumerate(nums):
distance = abs(target - x)
if distance < minum:
res = x
minum = distance
return res
解题思路:我们从二叉搜索树的中序遍历得到中得到有序的列表,然后我们在使用历史最佳的方式寻找最小的差,并保留下当前值,最终循环遍历完整个数列,即可得到最接近的值,较为简单。