【JS每日一算法:剑指Offer系列】🟩174.二叉搜索树的最小绝对差(深度优先)

60 阅读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

题解:

个人博客

更多JS版本题解点击链接关注该仓库👀

/**
 * @description: 深度优先  TC:O(N)  SC:O(n)
 * @author: JunLiangWang
 * @param {*} root 给定树的根节点
 * @return {*}
 */
function dfs(root){
    /**
     * 本方案使用深度优先中序遍历二叉树的节点,因为
     * 中序遍历二叉搜索树其节点值是升序的,因此我们
     * 通过不断比较上一个节点与当前节点的差,即可获
     * 得不同节点之间的最小差值
     */

    // 记录上一个节点
    let lastValue=0,
    // 记录最小差值
    min=Number.MAX_VALUE,
    // 是否第一次遍历
    isFirst=true;
    /**
     * @description: 递归回溯实现深度优先中序遍历
     * @author: JunLiangWang
     * @param {*} root 子树根节点
     * @return {*}
     */
    function recursion(root){
        // 根节点为空,直接return
        if(!root)return 
        // 递归左子树
        recursion(root.left)
        // 如果不是第一个节点,则获得两节点差值,并与以往差值
        // 比较取最小值
        if(!isFirst) min=Math.min(min,root.val-lastValue)
        // 更新上个节点值为当前节点值
        lastValue=root.val
        isFirst=false
        // 递归右子树
        recursion(root.right)
    }
    // 执行递归
    recursion(root)
    // 返回结果
    return min;
}