Smallest Absolute Difference in a BST

easy bst in-order

Problem

Given a BST, find the smallest absolute difference between any two distinct node values.

A BST visited in-order yields values in sorted order. The minimum gap between any pair of values must be the smallest gap between consecutive values in that sorted sequence — so do an in-order DFS, keep the previous value, and take min of val − prev.

Inputlevel-order: [4, 2, 6, 1, 3]
Output1
In-order = 1, 2, 3, 4, 6 — smallest gap is 1.

def min_diff(root):
    prev = [None]; best = [float("inf")]
    def visit(node):
        if node is None: return
        visit(node.left)
        if prev[0] is not None:
            best[0] = min(best[0], node.val - prev[0])
        prev[0] = node.val
        visit(node.right)
    visit(root)
    return best[0]
function minDiff(root) {
  let prev = null, best = Infinity;
  function visit(node) {
    if (!node) return;
    visit(node.left);
    if (prev !== null) best = Math.min(best, node.val - prev);
    prev = node.val;
    visit(node.right);
  }
  visit(root);
  return best;
}
class Solution {
    Integer prev = null; int best = Integer.MAX_VALUE;
    public int getMinimumDifference(TreeNode root) {
        visit(root); return best;
    }
    void visit(TreeNode node) {
        if (node == null) return;
        visit(node.left);
        if (prev != null) best = Math.min(best, node.val - prev);
        prev = node.val;
        visit(node.right);
    }
}
int prev_ = -1, best = INT_MAX;
void visit(TreeNode* node) {
    if (!node) return;
    visit(node->left);
    if (prev_ != -1) best = min(best, node->val - prev_);
    prev_ = node->val;
    visit(node->right);
}
Time: O(n) Space: O(h) recursion depth