leetcode_270 最接近的二叉搜索树值

188 阅读1分钟

要求

给定一个不为空的二叉搜索树和一个目标值 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

image.png

解题思路:我们从二叉搜索树的中序遍历得到中得到有序的列表,然后我们在使用历史最佳的方式寻找最小的差,并保留下当前值,最终循环遍历完整个数列,即可得到最接近的值,较为简单。