返回
Python 实现:巧解二叉搜索树最小绝对差
见解分享
2023-12-23 06:34:21
前言
LeetCode 0530. 二叉搜索树的最小绝对差 要求我们查找二叉搜索树(BST)中任意两个节点值之间的最小绝对差。BST 特性决定了其节点值的单调性,这为我们提供了解题的巧妙思路。
算法剖析
算法的关键在于利用 BST 的中序遍历 特点。由于 BST 中序遍历的顺序与节点值的升序排列一致,因此我们可以通过一次中序遍历,同时记录相邻节点值之间的差值,找到最小绝对差。
Python 实现
class Solution:
def minDiffInBST(self, root):
prev, min_diff = None, float('inf')
def inorder(node):
nonlocal prev, min_diff
if not node:
return
inorder(node.left)
if prev:
min_diff = min(min_diff, node.val - prev)
prev = node.val
inorder(node.right)
inorder(root)
return min_diff
算法流程
- 初始化: 定义局部变量
prev
用于记录上一个访问的节点值,min_diff
用于存储最小绝对差。 - 中序遍历: 使用递归定义中序遍历函数
inorder
,对 BST 进行中序遍历。 - 计算差值: 在中序遍历过程中,如果
prev
不为None
,则计算当前节点node
与上一个节点prev
之间的差值,并更新min_diff
的值。 - 更新
prev
: 将当前节点node
的值更新为prev
。 - 遍历结束: 当中序遍历结束时,
min_diff
即为二叉搜索树中任意两个节点值之间的最小绝对差。
代码示例
# 创建二叉搜索树
root = TreeNode(4)
root.left = TreeNode(2)
root.right = TreeNode(6)
root.left.left = TreeNode(1)
root.left.right = TreeNode(3)
# 调用函数求解最小绝对差
min_diff = Solution().minDiffInBST(root)
print(min_diff) # 输出:1
结语
通过巧妙地利用 BST 的中序遍历特性,我们能够高效地求解最小绝对差。本 Python 实现清晰简洁,充分体现了算法的精髓。