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,考察的知识点和代码的解释大纲如下:
- 二叉树(Binary Tree):二叉树是一种特殊的树结构,其中每个节点最多有两个子节点。题目给出的代码中的二叉树节点结构定义了一个整数值 val 和两个指向左右子节点的指针 left 和 right。
- 中序遍历(Inorder Traversal):中序遍历是一种二叉树遍历方法,按照“左子树-根节点-右子树”的顺序进行遍历。题目给出的代码中,通过递归方法 order 实现了对二叉树的中序遍历,并将遍历结果存储在一个动态数组 list 中。
- 差值最小值的计算:题目要求计算二叉搜索树中相邻节点值之差的最小值。在中序遍历结果中,相邻节点即为相邻的数组元素。首先,将中序遍历结果存储在数组 arr 中。然后,遍历数组 arr,计算相邻元素之差,并记录最小值。
代码的解释大纲如下:
- 定义一个
Solution
类。 - 定义一个私有成员变量
list
,用于存储中序遍历结果。 - 定义公有成员函数
getMinimumDifference
,用于计算二叉搜索树中相邻节点值之差的最小值。 - 在
getMinimumDifference
函数中,初始化最小差值ret
。 - 调用递归函数
order
获取中序遍历结果,并将结果存储在数组arr
中。 - 遍历数组
arr
,计算相邻元素之差,并更新最小差值ret
。 - 返回最小差值
ret
。 - 定义私有递归函数
order
,用于进行二叉树的中序遍历。 - 如果当前节点为空,返回空的动态数组。
- 递归调用
order
函数遍历左子树。 - 将当前节点的值添加到数组
list
中。 - 递归调用
order
函数遍历右子树。 - 返回中序遍历结果数组
list
。