# Definition for a binary tree node.
class TreeNode(object):
  def __init__(self, x):
    self.val = x
    self.left = None
    self.right = None
class Solution(object):
  def minDiffInBSTRecursive(self, node, prev_value, result):
    """
    :arg prev_value: A previous value if we had an array with sorted nodes' values.
                     E.g., if we have a BST of [-5, 4, 5, 7, 10, 12, 13, 17, 30, 100]
                     the previous for 10 is 7, the previous for 30 is 17.
    """
    if node is None:
      return
    
    # In-order traversal gives us a sorted order.
    # In-order traversal is
    #  1. go left
    #  2. check current node
    #  3. go right
    
    # 1. Go left
    self.minDiffInBSTRecursive(node.left, prev_value, result)

    # 2. Check the current node
    if prev_value[0] is not None:
      if result[0] is None:
        result[0] = node.val - prev_value[0]
      else:
        result[0] = min(result[0], node.val - prev_value[0])
    
    prev_value[0] = node.val
    
    # 3. Go right
    self.minDiffInBSTRecursive(node.right, prev_value, result)
    
  
  def minDiffInBST(self, root):
    """
    :type root: TreeNode
    :rtype: int
    """
    prev_value = [None]
    result = [None]
    self.minDiffInBSTRecursive(root, prev_value, result)
    
    return result[0]

Замечания:

Память — $O(n)$, время — $O(n)$.