LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)

chrome-headless-shell-mac-x64-160.0.8160.0(Canary).zip 内容概要:Chrome for Testing 官方 chrome-headless-shell 160.0.8160.0 x64 平台(金丝雀版通道),原版未修改,附来源说明。 适合人群:x64 上的自动化测试工程师、爬虫开发者、CI 环境搭建者。 使用场景及目标:①无头浏览器(Playwright/Puppeteer/Selenium 无界面自动化与爬虫的运行内核);②服务器/容器离线内置;③版本精准匹配(chromedriver 与 Chrome 需同大版本)。 其他说明:Chrome for Testing 为 Google 官方发布、允许自由分发的文件;本资源为第三方整理的下载便利服务。 立即下载

这是悦乐书的第314次更新,第335篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783)。给定具有根节点值的二叉搜索树(BST),返回树中任何两个不同节点的值之间的最小差值。示例:

给定的树[4,2,6,1,3,null,null]由下图表示:

      4
    /   \
  2      6
 / \    
1   3  

输出:1

说明:请注意,root是TreeNode对象,而不是数组。该树中的任意节点最小差值为1,它发生在节点1和节点2之间,也发生在节点3和节点2之间。


注意:

  • BST的大小将在2到100之间。

  • BST始终有效,每个节点的值都是整数,每个节点的值都不同。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

题目给的树是二叉树,并且是一个二叉搜索树,而其遵循左子树<根节点<右子树的大小关系,借助中序遍历,我们可以得到一组有序的节点值,从小到大排列。

使用一个数组,将中序遍历的节点值依次添加进数组中去,然后遍历数组,比较前后两个节点之间的差值,最后得到最小差值并返回。中间遍历BST节点使用递归完成。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {

    private List<Integer> list = new ArrayList<Integer>();

    public int minDiffInBST(TreeNode root) {
        helper(root);
        int min = Integer.MAX_VALUE;
        for (int i=1; i<list.size(); i++) {
            int dif = Math.abs(list.get(i) - list.get(i-1));
            min = Math.min(dif, min);
        }
        return min;
    }

    public void helper(TreeNode root){
        if (root == null) {
            return ;
        }
        helper(root.left);
        list.add(root.val);
        helper(root.right);
    }

}

03 第二种解法

针对第一种思路,我们也可以使用迭代的方法来解。使用栈来对BST进行遍历,依旧使用中序遍历,先找到BST中左子树里面的最底层左节点,然后再处理右节点。遍历完节点且将节点值添加进数组中后,对数组中的相邻元素求差值,依次比较得到最小差值返回即可。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {

    public int minDiffInBST(TreeNode root) {
        List<Integer> list = new ArrayList<Integer>();
        Stack<TreeNode> stack = new Stack<TreeNode>();
        while (!stack.isEmpty() || root != null) {
            while (root != null) {
                stack.push(root);
                root = root.left;
            }
            if (!stack.isEmpty()) {
                root = stack.pop();
                list.add(root.val);
                root = root.right;
            }
        }
        int min = Integer.MAX_VALUE;
        for (int i=1; i<list.size(); i++) {
            int dif = Math.abs(list.get(i) - list.get(i-1));
            min = Math.min(dif, min);
        }
        return min;
    }
}

04 第三种解法

我们也可以不使用数组,使用一个变量来存储当前节点的前一个节点值即可,在处理当前节点时就可以直接计算两节点的差值,依旧使用中序遍历,此解法使用递归。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {

    private Integer prev = null;
    private int min = Integer.MAX_VALUE;

    public int minDiffInBST(TreeNode root) {
        helper(root);
        return min;
    }

    public void helper (TreeNode root) {
        if (root == null) {
            return ;
        }
        helper(root.left);
        if (prev != null) {
            min = Math.min(min, root.val-prev);
        } 
        prev = root.val;
        helper(root.right);
    }
}

05 第四种解法

针对第三种解法,同样可以使用迭代的方式,依旧使用栈,和第二种解法里用栈的方式一样。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {

    public int minDiffInBST(TreeNode root) {
        Integer prev = null;
        int min = Integer.MAX_VALUE;
        Stack<TreeNode> stack = new Stack<TreeNode>();
        while (!stack.isEmpty() || root != null) {
            while (root != null) {
                stack.push(root);
                root = root.left;
            }
            if (!stack.isEmpty()) {
                root = stack.pop();
                if (prev != null) {
                    min = Math.min(min, root.val - prev);
                }
                prev = root.val;
                root = root.right;
            }
        }
        return min;
    }
}

06 小结

算法专题目前已日更超过五个月,算法题文章183+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

多智能体-系统-形成-控制 附matlab代码.rar 立即下载

相关推荐

具有PWM控制VSC-HVDC链路的IEEE30总线传输系统(Simulink仿真实现)

内容概要:本文构建了一个包含PWM控制VSC-HVDC链路的IEEE30节点电力传输系统,并基于Simulink平台完成了系统的建模仿真。该模型聚焦于高压直流输电(HVDC)技术在区域电网互联中的应用,采用电压源型换流器(VSC)与脉宽调制(PWM)技术实现高效、灵活的电能传输。研究重点在于分析VSC-HVDC链路在复杂多节点电网中对潮流分布、系统稳定性及电能质量的调控能力,特别关注其在区域电网互联、新能源大规模接入以及跨区域电力交换等场景下的动态响应特性与控制性能,为现代智能电网的发展提供技术支撑与仿真验证手段。; 适合人群:具备电力系统、电气工程或自动化等相关专业背景的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于研究VSC-HVDC在多节点电网(如IEEE30节点)中的建模与仿真方法;②分析PWM控制策略下HVDC链路对电网潮流分布、电压稳定性和故障穿越能力的影响;③为区域电网互联、新能源并网及智能电网调度等课题提供仿真基础和技术验证。; 阅读建议:此资源以Simulink仿真实现为核心,建议读者在掌握电力电子技术和电力系统分析基础知识的前提下,结合仿真模型深入理解VSC-HVDC的工作原理与控制策略。在学习过程中,应着重关注模型参数设置、控制环路设计及仿真结果的分析,以达到理论与实践相结合的目的。

LeetCode 530. 二叉搜索树的最小绝对差(中序遍历)

1. 题目 给定一个所有节点为非负值的二叉搜索树,求树中任意两节点的差的绝对值的最小值。 示例 : 输入: 1 \ 3 / 2 输出: 1 解释: 最小绝对差为1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。 注意: 树中至少有2个节点。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/proble...

Michael是个半路程序员 1075

基于KDE-CDF置信带的不确定综合能源系统鲁棒调度优化研究(Matlab代码实现)

内容概要:本研究针对不确定综合能源系统中的鲁棒调度优化问题,提出一种基于核密度估计-累积分布函数(KDE-CDF)置信带的建模方法,用以精确刻画风能、光伏及负荷等不确定性因素的非正态概率分布特征。通过构建KDE-CDF模型,能够有效捕捉实际运行中新能源出力与负荷需求的波动性与随机性,并在此基础上设计鲁棒优化调度框架,提升系统在不确定性环境下的运行可靠性与经济性。该方法结合Matlab编程实现,综合考虑系统运行成本、峰谷差、碳排放等多重目标,实现多维度协调优化。研究还探讨了与智能优化算法(如粒子群算法)相结合的应用路径,增强了模型的求解效率与工程实用性,为含多种储能装置、电转气设备及碳捕集系统的复杂综合能源系统提供了科学的调度决策支持。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的研究生、科研人员,以及从事综合能源系统规划、运行与调度工作的工程技术人员。; 使用场景及目标:①解决高比例可再生能源接入背景下综合能源系统调度中的不确定性建模难题;②提升调度方案在面对新能源强波动性时的鲁棒性与适应能力;③为融合多类型灵活性资源(如储能、电转气、碳捕集)的综合能源系统提供精细化、可落地的优化运行策略。; 阅读建议:建议读者在掌握概率统计、随机优化与电力系统运行基础知识的前提下,结合文中提供的Matlab代码进行实践操作,重点关注KDE-CDF置信带的构建流程及其在鲁棒优化模型中的嵌入机制,通过调整输入数据分布、参数设置与场景配置开展仿真对比实验,深入理解不确定性建模精度对调度决策质量的影响,进而掌握从数据驱动角度提升系统鲁棒性的关键技术路径。

LeetCode之Minimum Distance Between BST Nodes(Kotlin)

问题: Given a Binary Search Tree (BST) with the root node root, return the minimum difference between the values of any two different nodes in the tree. Example : Input: root = [4,2,6,1,3,null,null] ...

weixin_34362875的博客 152

手把手教你用TiggerRamDisk绕过iPhone/iPad激活锁(支持iOS16.3,Win/Mac双平台保姆级教程)

本文详细介绍了如何使用TiggerRamDisk工具绕过iPhone/iPad的激活锁,支持iOS16.3系统,并提供Windows和Mac双平台的保姆级教程。从工具准备、设备连接到核心解锁流程,一步步指导用户完成操作,帮助二手设备或旧设备重获新生。

weixin_29323493的博客 934

从零到一:YT8512C PHY芯片在STM32F407上的LWIP移植实战与避坑指南

本文详细介绍了YT8512C PHY芯片在STM32F407平台上基于LWIP协议栈的移植实战,涵盖硬件连接、CubeMX配置、寄存器定制和调试技巧。重点解析了与主流PHY芯片的差异,提供了完整的避坑指南和优化建议,帮助开发者快速实现稳定可靠的嵌入式网络连接。

uber9的博客 538

LeetCode-1848. 到目标元素的最小距离_Python

给你一个整数数组 nums (下标从 0 开始计数)以及两个整数 target 和 start ,请你找出一个下标 i ,满足 nums[i] == target 且 abs(i - start)最小化。注意:abs(x) 表示 x 的绝对值。返回 abs(i - start) 。题目数据保证 target 存在于 nums 中。...

weixin_45344430的博客 351

DMTF相关协议(一):Redfish和SMBIOS

Redfish 是一种管理标准,使用超媒体 RESTful 接口中的数据模型表示。该模型以标准的、机器可读的模式表示,消息的有效负载以 JSON 表示。该协议本身利用了 OData v4。由于它是一个超媒体 API,因此能够通过一致的接口表示各种实现。它具有管理数据中心资源、处理事件、长时间任务和发现的机制。

weixin_44032634的博客 2268

【算法】逆序对问题的四种解法(归并排序,BST,树状数组,线段树)及变形

引发我对逆序对这个问题思考的源自这道题:315. Count of Smaller Numbers After Self 以前我以为求一个序列逆序对个数的解法就是归并排序的改版

haolexiao的专栏 6300

使用STM32F103C8T6控制舵机丝滑运转附代码

使用STM32F103C8T6控制舵机丝滑运转原理和案例,附代码。

m0_63566592的博客 4238

保姆级教程:用BMS的HVIL检测电路,手把手教你排查高压互锁故障(附PWM/直流源方案对比)

本文详细解析了BMS中的HVIL检测电路,通过对比直流源与PWM两种方案,提供了一套系统化的高压互锁故障诊断流程。从电路原理到实战技巧,帮助维修人员精准定位故障根源,提升电动汽车高压系统的安全性和可靠性。

weixin_29300241的博客 393

Minimum Distance Between BST Nodes

[ ]title Description Given a Binary Search Tree (BST) with the root node root, return the minimum difference between the values of any two different nodes in the tree. Example 1: Input: root = ...

mcrwayfun,欢迎你 5520

LVGL core theme主题管理(lv_theme.c)

如果打开宏,主题的初始化是在显示设备注册时完成的。整个themes的实现放在目录下面。这里一共有三套主题(basic、default和mono)可供选择或者参考。源码中默认对接的是 default 主题,所以在中,看到的是调用default主题的接口。也就是说,如果需要更换主题,把这里面的接口换掉就可以了。或者要重新做一套主题,参考这些实现修改也就可以了。虽说有三套主题,但逻辑流程是一样的。主要完成两个工作:构造lv_theme_t结构体和初始化默认样多备用(style_init函数内实现)。构造。....

Bigan(安)的博客 3414

LeetCode 783. 二叉搜索树结点最小距离(Minimum Distance Between BST Nodes)

783. 二叉搜索树结点最小距离 LeetCode783. Minimum Distance Between BST Nodes 题目描述 给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。 示例: 输入: root = [4,2,6,1,3,null,null] 输出: 1 解释: 注意: root 是树结点对象 (TreeNode object),而不是数组。 给定的树 ...

weixin_30597269的博客 144

适航规章、标准,书籍资料下载汇总(更新中)

以下是一些收集到的适航相关的资料,分享给大家。(如果没有你想要的资料,请留言,等找到会及时更新!

qq_41854911的博客 2562

【数据集】GPM IMERG Daily Precipitation Dataset

GPM IMERG Daily Precipitation Dataset

WW、forever的博客 1223

783. Minimum Distance Between BST Nodes

Given a Binary Search Tree (BST) with the root node root, return the minimum difference between the values of any two different nodes in the tree.Example :Input: root = [4,2,6,1,3,null,null] Output: 1

xdhc的博客 385

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LeetCode 题解之 783. Minimum Distance Between BST Nodes

783. Minimum Distance Between BST Nodes 题目描述和难度 题目描述: 给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。 示例: 输入: root = [4,2,6,1,3,null,null] 输出: 1 解释: 注意,root是树结点对象(TreeNode object),而不是数组。 给定的树 [4,2,6,1,3,...

李威威的博客 709

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【LeetCode】783. Minimum Distance Between BST Nodes

Given a Binary Search Tree (BST) with the root node root, return the minimum difference between the values of any two different nodes in the tree.  Input: root = [4,2,6,1,3,null,null] Output: 1 Expl...

iKun 224

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LeetCode刷题783. Minimum Distance Between BST Nodes

题目描述: Given a Binary Search Tree (BST) with the root node root, return the minimum difference between the values of any two different nodes in the tree. Example : Input: root = [4,2,6,1,3,null,nul...

码上暴富 415

二叉树--leetcode 783.Minimum Distance Between BST Nodes

https://www.cnblogs.com/robsann/p/7567596.html https://blog.youkuaiyun.com/qq_33243189/article/details/80222629 两篇讲解二叉树比较好的文章 二叉树的中序遍历--python3 783. Minimum Distance Between BST Nodes # Definition for ...

weixin_40003920的博客 241

Java实现选最远距离的座位_LeetCode算法题-Maximize Distance to Closest Person(Java实现)...

这是悦乐书的第328次更新,第351篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第198题(顺位题号是849)。在一排座位中,1表示一个人坐在该座位上,0表示座位是空的。在这些座位中,至少有一个空座位,至少有一个人坐着。Alex想坐在座位上,以便他和离他最近的人之间的距离最远。返回距离最近的人的最大距离。例如:输入:[1,0,0,0,1,0,1]输出:2说明:如果Ale...

weixin_42545503的博客 489

【LeetCode - 296】最佳的碰头地点

【困难】排序、数学

学哥斌的博客 4490

Minimum Distance Between BST Nodes 二叉搜索树结点最小距离

给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。 示例: 输入: root = [4,2,6,1,3,null,null] 输出: 1 解释: 注意,root是树结点对象(TreeNode object),而不是数组。 给定的树 [4,2,6,1,3,null,null] 可表示为下图: 4 / \ 2 ...

qq_26410101的博客 240

leetcode 477. Total Hamming Distance | 477. 汉明距离总和

题目 https://leetcode.com/problems/total-hamming-distance/ 题解 class Solution { public int totalHammingDistance(int[] nums) { int N = nums.length; int[] count = new int[32]; for (int n : nums) { for (int i = 0; i <

寒泉 4万+
上一篇: LeetCode算法题-Jewels and Stones(Java实现)
下一篇: LeetCode算法题-Letter Case Permutation(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值