Java 题解 | #牛群最小体重差#
牛群最小体重差
https://www.nowcoder.com/practice/e96bd1aad52a468d9bff3271783349c1
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。
查看16道真题和解析