树与图简单1 种解法
#530二叉搜索树的最小绝对差
返回二叉搜索树任意两个不同节点值之间的最小绝对差。
#二叉搜索树#中序遍历#深度优先搜索
解题主线
01
中序序列有序,最小差一定出现在相邻元素之间。
解法 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;
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);
}
}递归中序遍历,用方法内 holder 保存前驱和当前最小差。
边界与易错点
- 前驱节点和最小值不能作为未重置的实例状态。
- 至少两个节点是题目约束,方法可据此返回最终最小值。
整理来源
由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。
leetcode/src/main/java/tree/Q530_getMinimumDifference.java