题目地址(530. 二叉搜索树的最小绝对差)

https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/

题目描述

  1. 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值
  2. 差值是一个正数,其数值等于两值之差的绝对值。
  3. 示例 1
  4. 输入:root = [4,2,6,1,3]
  5. 输出:1
  6. 示例 2
  7. 输入:root = [1,0,48,null,null,12,49]
  8. 输出:1
  9. 提示:
  10. 树中节点的数目范围是 [2, 104]
  11. 0 <= Node.val <= 105
  12. 注意:本题与 783 https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/ 相同

前置知识


公司

  • 暂无

思路

还是中序遍历 将每个相邻的数的差值求出 取出最小的返回

关键点


  • 代码

  • 语言支持:Java

Java Code:

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode() {}
  8. * TreeNode(int val) { this.val = val; }
  9. * TreeNode(int val, TreeNode left, TreeNode right) {
  10. * this.val = val;
  11. * this.left = left;
  12. * this.right = right;
  13. * }
  14. * }
  15. */
  16. class Solution {
  17. //返回值
  18. int res = Integer.MAX_VALUE;
  19. //前一个节点
  20. TreeNode pre ;
  21. public int getMinimumDifference(TreeNode root) {
  22. loop(root);
  23. return res;
  24. }
  25. public void loop(TreeNode root) {
  26. if (root == null) {
  27. return;
  28. }
  29. loop(root.left);
  30. if (pre != null) {
  31. //最大值和 当前值-上个值 取一个小值
  32. res = Math.min(res, root.val - pre.val);
  33. }
  34. pre = root;
  35. loop(root.right);
  36. }
  37. }

复杂度分析

令 n 为数组长度。

  • 时间复杂度:530. 二叉搜索树的最小绝对差 - 图1#card=math&code=O%28n%29&id=JQfuM)
  • 空间复杂度:530. 二叉搜索树的最小绝对差 - 图2#card=math&code=O%28n%29&id=Sj2Wg)