題目:
給你一個二叉搜索樹的根節點?root
?,返回?樹中任意兩不同節點值之間的最小差值?。
差值是一個正數,其數值等于兩值之差的絕對值。
解析:
minDiffInBST
?方法是主要方法。- 創建一個?
ArrayList
?來存儲樹的節點值。inorderTraversal
?方法進行中序遍歷,將節點值添加到列表中。- 在得到有序列表后,遍歷列表,計算相鄰元素的差值。
- 使用?
Math.min
?來持續更新最小差值。- 最后,返回找到的最小差值。
import java.util.ArrayList;
import java.util.List;public class no_530 {public static void main(String[] args) {TreeNode root = new TreeNode(4);root.left = new TreeNode(2);root.right = new TreeNode(6);root.left.left = new TreeNode(1);root.left.right = new TreeNode(3);System.out.println(getMinimumDifference(root));}public static int getMinimumDifference(TreeNode root) {List<Integer> values = new ArrayList<>();inorderTraversal(root, values);int minDiff = Integer.MAX_VALUE;for (int i = 1; i < values.size(); i++) {minDiff = Math.min(minDiff, values.get(i) - values.get(i - 1));}return minDiff;}public static void inorderTraversal(TreeNode node, List<Integer> values) {if (node == null) return;inorderTraversal(node.left, values);values.add(node.val);inorderTraversal(node.right, values);}
}
?