1.题目

给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。

示例:

  1. 输入:
  2. 1
  3. \
  4. 3
  5. /
  6. 2
  7. 输出:
  8. 1
  9. 解释:
  10. 最小绝对差为 1,其中 2 1 的差的绝对值为 1(或者 2 3)。

提示:

  • 树中至少有 2 个节点。

2.思路

本题要求二叉搜索树任意两节点差的绝对值的最小值,而我们知道二叉搜索树有个性质为二叉搜索树中序遍历得到的值序列是递增有序的,因此我们只要得到中序遍历后的值序列即能用上文提及的方法来解决。

  1. class Solution {
  2. int pre;
  3. int ans;
  4. public int getMinimumDifference(TreeNode root) {
  5. ans = Integer.MAX_VALUE;
  6. pre = -1;
  7. dfs(root);
  8. return ans;
  9. }
  10. public void dfs(TreeNode root) {
  11. if (root == null) {
  12. return;
  13. }
  14. dfs(root.left);
  15. if (pre == -1) {
  16. pre = root.val;
  17. } else {
  18. ans = Math.min(ans, root.val - pre);
  19. pre = root.val;
  20. }
  21. dfs(root.right);
  22. }
  23. }