题解 | #牛群最小体重差# 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; /** * 获取二叉搜索树中任意两节点值的最小差值 * * @param root 二叉搜索树的根节点 * @return 任意两节点值的最小差值 */ public int getMinimumDifference(TreeNode root) { list = new ArrayList<>(); inOrder(root); int minDiff = Integer.MAX_VALUE; for (int i = 0; i < list.size() - 1; i++) { int diff = list.get(i + 1) - list.get(i); if (diff < minDiff) { minDiff = diff; } } return minDiff; } /** * 中序遍历二叉树,将节点值存储在list中 * * @param root 当前节点 */ private void inOrder(TreeNode root) { if (root == null) { return; } inOrder(root.left); list.add(root.val); inOrder(root.right); } }
这段代码使用的是Java编程语言,主要考察的知识点包括二叉搜索树、中序遍历、递归、列表操作等。
代码的文字解释大纲如下:
- 创建一个
TreeNode
类,表示二叉树的节点,包含一个整数值、左右子节点的引用。 - 创建一个
Solution
类,其中包含一个私有的列表list
,用于存储中序遍历后的节点值。 getMinimumDifference
方法接收一个二叉搜索树的根节点作为参数,返回任意两个节点值的最小差值。- 在
getMinimumDifference
方法中,先创建一个空的列表list
,然后调用inOrder
方法对二叉树进行中序遍历,将节点值存储在list
中。 - 初始化一个变量
minDiff
,用于保存最小差值,初始值设为整型最大值。 - 使用循环遍历列表
list
,计算相邻两个节点值的差值,并与minDiff
比较,更新为更小的差值。 - 最后返回计算得到的最小差值
minDiff
。 - 定义
inOrder
方法,用于中序遍历二叉树。如果当前节点为空,则返回;否则,递归调用inOrder
方法遍历左子树,将当前节点的值添加到列表list
中,然后递归调用inOrder
方法遍历右子树。 - 在主程序中,可以创建一个二叉搜索树的根节点,并调用
getMinimumDifference
方法获取任意两个节点值的最小差值。
这段代码的主要目标是计算二叉搜索树中任意两个节点值的最小差值,通过中序遍历二叉树并利用列表存储节点值的方式,可以得到有序的节点值序列。然后,遍历序列,计算相邻两个节点值的差值,并找到最小的差值。这个问题可以通过利用二叉搜索树的特性和中序遍历来解决。