原题
树与图简单1 种解法

#530二叉搜索树的最小绝对差

返回二叉搜索树任意两个不同节点值之间的最小绝对差。

#二叉搜索树#中序遍历#深度优先搜索

原题

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值

差值是一个正数,其数值等于两值之差的绝对值。

示例 1:

输入:root = [4,2,6,1,3]
输出:1

示例 2:

输入:root = [1,0,48,null,null,12,49]
输出:1

提示:

  • 树中节点的数目范围是 [2, 104]
  • 0 <= Node.val <= 105

注意:本题与 783 https://leetcode.cn/problems/minimum-distance-between-bst-nodes/ 相同

查看原题

解题主线

  1. 中序序列有序,最小差一定出现在相邻元素之间。

解法 1:中序相邻比较

递归中序遍历,用方法内 holder 保存前驱和当前最小差。

  • 时间复杂度: O(n)

  • 空间复杂度: O(h)

JAVA
import java.util.*;

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int val) {
        this.val = val;
    }
}

class Solution {
    public int getMinimumDifference(TreeNode root) {
        TreeNode[] previous = new TreeNode[1];
        int[] answer = {Integer.MAX_VALUE};
        inorder(root, previous, answer);
        return answer[0];
    }

    private void inorder(TreeNode node, TreeNode[] previous, int[] answer) {
        if (node == null) return;
        // BST 中序序列严格递增,最小差只需检查相邻节点
        inorder(node.left, previous, answer);
        if (previous[0] != null) {
            answer[0] = Math.min(answer[0], node.val - previous[0].val);
        }
        // 在进入右子树前同步更新全局中序前驱
        previous[0] = node;
        inorder(node.right, previous, answer);
    }
}

边界与易错点

  • 前驱节点和最小值不能作为未重置的实例状态。
  • 至少两个节点是题目约束,方法可据此返回最终最小值。

整理来源

由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。

  • leetcode/src/main/java/tree/Q530_getMinimumDifference.java