创见博客
二叉搜索树的最小绝对差
七崽爱吃小饼干2026/01/10阅读 0专栏 算法合集

二叉搜索树的最小绝对差

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

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

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

示例 2:

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

提示:

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

解法

ts
/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */




function getMinimumDifference(root: TreeNode | null): number {
    // 按照二叉排序树的规则,左子树的节点<根节点<右子树节点
    // 二叉排序树按中序遍历,就可以得到从小到大排序的序列。
    // 所以按照中序遍历,依次得到两个节点之间的差值,就可以找到最小差值。
    // 节点中所有数字都是 >= 0的
    // 第一个遍历的节点是最左下节点,其值最小,没有前驱
    // 用-1来跳过计算
    let res = Infinity
    let pre = -1
    function inOrder(root: TreeNode | null){
        if(!root) return 
        inOrder(root.left)
        if(pre === -1){ // 访问的第一个节点,跳过计算
            pre = root.val
        }else{
            res = Math.min(res, root.val - pre) // 都大于0且当前节点值一定大于前驱,所以不需要绝对值
            pre = root.val // 更新前驱为当前访问节点
        }
        inOrder(root.right)

    }
    inOrder(root)
    return res
};
评论
0/100