java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 解题思路:时间复杂度O(n),空间复杂度O(n) 一个有序序列,最小的差值一定出现在两个相邻的元素之间。因为是有序的,间隔越远,肯定差的越多,而间隔越近,差的越少。而二叉搜索树就是一个有序序列,而且中序遍历正好是升序序列。所以我们可以在中序遍历的过程中,获取中序遍历相邻两个结点的差值。 代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/ class Solution {private int pre = -1;//保存中序遍历,正在遍历的当前结点的前一个结点private int minDifference = Integer.MAX_VALUE;//保存两个结点的最小差值public int getMinimumDifference(TreeNode root) {if(root == null) return 0;//如果root为null那么差值为0getMinimumDifference(root.left);//中序遍历,先遍历左子树//如果pre不是-1的话,说明当前中序遍历已经不是第一个结点了,所以我们求出目前的最小差值if(pre != -1) minDifference = Math.min(minDifference,Math.abs(pre - root.val));//pre进行记录,它就是下一次遍历结点的前驱pre = root.val;//中序遍历,中间getMinimumDifference(root.right);//中序遍历,然后遍历右子树return minDifference;//返回差值} }