该题解的思路是利用二叉搜索树的中序遍历特性,即中序遍历得到的结果是一个递增的有序序列。首先对二叉搜索树进行中序遍历,将所有节点的值存储到一个数组中。然后遍历该数组,计算相邻两个元素之间的差值,最后返回差值的最小值即可。
时间复杂度: O(n)
空间复杂度: O(n)
# 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 minDiffInBST(self, root: Optional[TreeNode]) -> int:
vals = []
def inorder(root):
if not root:
return
inorder(root.left) # 递归遍历左子树
vals.append(root.val) # 将当前节点的值加入数组
inorder(root.right) # 递归遍历右子树
inorder(root) # 中序遍历二叉搜索树
# 计算相邻元素的差值,并返回最小差值
tmp = [vals[i+1]-vals[i] for i in range(0, len(vals) - 1)]
return min(tmp)