530. Minimum Absolute Difference in BST

川长思鸟来 2022-05-29 21:12 241阅读 0赞

原题链接: https://leetcode.com/problems/minimum-absolute-difference-in-bst/description/


一个常见的想法是使用中序遍历来遍历这颗BST(因为二叉排序树中序遍历就是一个已经有序的数组),然后计算相邻两个数的差值,就可以计算得出最小的绝对值之差。

  1. public class Solution {
  2. int min = Integer.MAX_VALUE;
  3. Integer prev = null;
  4. public int getMinimumDifference(TreeNode root) {
  5. if (root == null) return min;
  6. getMinimumDifference(root.left);
  7. if (prev != null) {
  8. min = Math.min(min, root.val - prev);
  9. }
  10. prev = root.val;
  11. getMinimumDifference(root.right);
  12. return min;
  13. }
  14. }

如果所给的树不是二叉排序树,那这个时候我们可以借助TreeSet,并且使用先序遍历来帮助我们去寻找最邻近的数对。

  1. public class Solution {
  2. TreeSet<Integer> set = new TreeSet<>();
  3. int min = Integer.MAX_VALUE;
  4. public int getMinimumDifference(TreeNode root) {
  5. if (root == null) return min;
  6. if (!set.isEmpty()) {
  7. if (set.floor(root.val) != null) {
  8. min = Math.min(min, root.val - set.floor(root.val));
  9. }
  10. if (set.ceiling(root.val) != null) {
  11. min = Math.min(min, set.ceiling(root.val) - root.val);
  12. }
  13. }
  14. set.add(root.val);
  15. getMinimumDifference(root.left);
  16. getMinimumDifference(root.right);
  17. return min;
  18. }
  19. }

发表评论

表情:
评论列表 (有 0 条评论,241人围观)

还没有评论,来说两句吧...

相关阅读