530. 二叉搜索树的最小绝对差

124 阅读1分钟

题目

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。

差值是一个正数,其数值等于两值之差的绝对值。

 

示例 1:

输入: root = [4,2,6,1,3]
输出: 1

示例 2:

输入: root = [1,0,48,null,null,12,49]
输出: 1

 

提示:

  • 树中节点的数目范围是 [2, 104]
  • 0 <= Node.val <= 105

 

注意: 本题与 783 leetcode-cn.com/problems/mi… 相同

题解

题目要求求二叉树任意节点的最小绝对值,可以转换为在一个升序的数组中求任意两个元素的之差的绝对值最小值,那么这两个元素一定是相邻的,最小绝对值之差,即相邻元素的之差的绝对值

我们知道二叉树的中序遍历是值递增的升序数组,因此可以中序遍历中比较相邻两个元素的差的绝对值,找到最小的绝对差

代码

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var getMinimumDifference = function(root) {
   // 最小差值,默认为最大数字
   let minDiff = Number.MAX_SAFE_INTEGER;
   // 记录前一个节点值,
   let pre = -1;

   // 中序遍历
   function inorder(root) {
      if(root == null) return;
      inorder(root.left);
      // 第一次
      if (pre == - 1) {
         pre = root.val;
      } else {
         minDiff = Math.min(minDiff, Math.abs(root.val - pre));
         pre = root.val;
      }
      inorder(root.right);
   }

   inorder(root);

   return minD