📜  配对,具有最小的绝对差| BST(1)

📅  最后修改于: 2023-12-03 15:42:05.002000             🧑  作者: Mango

题目介绍:找到二叉搜索树中任意两个不同节点的值之间的差的绝对值最小值,包括一个函数实现和测试用例

题目描述

给定一个二叉搜索树,找到树中任意两个不同节点的值之间的差的绝对值最小值。

函数实现

下面是使用Python实现的函数:

class TreeNode:
  def __init__(self, val=0, left=None, right=None):
    self.val = val
    self.left = left
    self.right = right

def getMinimumDifference(root: TreeNode) -> int:
  prev = float('-inf')
  minDiff = float('inf')
  def inorderTraversal(node):
    nonlocal prev, minDiff
    if not node:
      return
    inorderTraversal(node.left)
    minDiff = min(minDiff, node.val - prev)
    prev = node.val
    inorderTraversal(node.right)
  inorderTraversal(root)
  return minDiff
解题思路

对于BST(二叉搜索树),我们可以使用中序遍历来得到一个有序数组,然后在有序数组中找到任意两个元素之间的差的绝对值最小值。因为二叉搜索树的中序遍历是有序的,所以两个有序元素之间的差的绝对值最小值只能是它们相邻的两个元素之间的差的绝对值。

因此,我们可以使用一个变量prev来存储当前遍历的前一个节点的值,用来计算当前节点与前一个节点之间的差的绝对值。在遍历时,我们使用一个变量minDiff来存储当前最小的差的绝对值,每当我们遍历到一个节点时,就将minDiff更新为当前节点与前一个节点之间的差的绝对值和minDiff本身的最小值。最后返回minDiff即可。

测试用例

下面是一些测试用例:

# 测试用例 1
root = TreeNode(1)
root.right = TreeNode(3)
root.right.left = TreeNode(2)
assert getMinimumDifference(root) == 1

# 测试用例 2
root = TreeNode(4)
root.left = TreeNode(2)
root.right = TreeNode(6)
root.left.left = TreeNode(1)
root.left.right = TreeNode(3)
root.right.left = TreeNode(5)
root.right.right = TreeNode(7)
assert getMinimumDifference(root) == 1
时间复杂度

我们遍历了一次二叉搜索树,时间复杂度为$O(n)$。

空间复杂度

我们使用了一个变量prev来存储当前遍历的前一个节点的值,和一个变量minDiff来存储当前最小的差的绝对值,空间复杂度为$O(1)$。

参考文献