import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @return int整型
     */
    private List<Integer> list; // 用于存储中序遍历结果

    public int getMinimumDifference(TreeNode root) {
        int ret = 100000;
        List<Integer> arr = order(root); // 获取中序遍历结果
        for (int i = 0; i < arr.size() - 1; i++) {
            if (arr.get(i + 1) - arr.get(i) <
                    ret) { // 计算相邻节点值的差的最小值
                ret = arr.get(i + 1) - arr.get(i);
            }
        }
        return ret;
    }

    private List<Integer> order(TreeNode root) {
        list = new ArrayList<>();
        inOrder(root); // 进行中序遍历
        return list;
    }

    private void inOrder(TreeNode node) {
        if (node == null) {
            return;
        }
        inOrder(node.left); // 遍历左子树
        list.add(node.val); // 将当前节点值添加到结果列表
        inOrder(node.right); // 遍历右子树
    }
}

该题使用的编程语言是Java,考察的知识点和代码的解释大纲如下:

  1. 二叉树(Binary Tree):二叉树是一种特殊的树结构,其中每个节点最多有两个子节点。题目给出的代码中的二叉树节点结构定义了一个整数值 val 和两个指向左右子节点的指针 left 和 right。
  2. 中序遍历(Inorder Traversal):中序遍历是一种二叉树遍历方法,按照“左子树-根节点-右子树”的顺序进行遍历。题目给出的代码中,通过递归方法 order 实现了对二叉树的中序遍历,并将遍历结果存储在一个动态数组 list 中。
  3. 差值最小值的计算:题目要求计算二叉搜索树中相邻节点值之差的最小值。在中序遍历结果中,相邻节点即为相邻的数组元素。首先,将中序遍历结果存储在数组 arr 中。然后,遍历数组 arr,计算相邻元素之差,并记录最小值。

代码的解释大纲如下:

  1. 定义一个 Solution 类。
  2. 定义一个私有成员变量 list,用于存储中序遍历结果。
  3. 定义公有成员函数 getMinimumDifference,用于计算二叉搜索树中相邻节点值之差的最小值。
  4. 在 getMinimumDifference 函数中,初始化最小差值 ret
  5. 调用递归函数 order 获取中序遍历结果,并将结果存储在数组 arr 中。
  6. 遍历数组 arr,计算相邻元素之差,并更新最小差值 ret
  7. 返回最小差值 ret
  8. 定义私有递归函数 order,用于进行二叉树的中序遍历。
  9. 如果当前节点为空,返回空的动态数组。
  10. 递归调用 order 函数遍历左子树。
  11. 将当前节点的值添加到数组 list 中。
  12. 递归调用 order 函数遍历右子树。
  13. 返回中序遍历结果数组 list