1. 二叉搜索树的最小绝对差解析与实现
1.1 问题背景与核心思路
给定一个二叉搜索树(BST),我们需要找出树中任意两节点值之间的最小绝对差。这个问题看似简单,但考察了对BST性质的深入理解和遍历算法的灵活运用。
BST有一个关键特性:其中序遍历结果是一个升序排列的数组。这个性质为我们解决问题提供了重要突破口。想象一下,在一个已经排序的数组中,要找出相邻元素的最小差值,这比在无序数组中寻找任意两个元素的最小差值要高效得多。
1.2 中序遍历的迭代实现
在Python中,我们可以用迭代的方式实现中序遍历,避免递归可能带来的栈溢出问题。以下是详细的代码解析:
python复制# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
nums = [] # 存储中序遍历结果
stk = [] # 辅助栈
cur = root # 当前节点指针
while cur or stk:
# 一直向左走,将沿途节点压入栈
while cur:
stk.append(cur)
cur = cur.left
# 弹出栈顶节点并访问
cur = stk.pop()
nums.append(cur.val)
# 转向右子树
cur = cur.right
# 计算相邻元素的差值
n = len(nums)
ans = float('inf')
for i in range(1, n):
ans = min(ans, nums[i] - nums[i - 1])
return ans
注意:在实际编码中,我们使用
float('inf')来表示无穷大,这样可以方便地进行最小值比较。在Python 3.5+中,也可以使用math.inf。
