【LeetCode每日一题】——783.二叉搜索树节点最小距离

news2024/11/28 22:32:26

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【解题思路】
  • 七【题目提示】
  • 八【题目注意】
  • 九【时间频度】
  • 十【代码实现】
  • 十一【提交结果】

一【题目类别】

  • 深度优先搜索

二【题目难度】

  • 简单

三【题目编号】

  • 783.二叉搜索树节点最小距离

四【题目描述】

  • 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
  • 差值是一个正数,其数值等于两值之差的绝对值。

五【题目示例】

  • 示例 1:

    • 在这里插入图片描述
    • 输入:root = [4,2,6,1,3]
    • 输出:1
  • 示例 2:

    • 在这里插入图片描述
    • 输入:root = [1,0,48,null,null,12,49]
    • 输出:1

六【解题思路】

  • 此题比较简单,利用二叉搜索树的性质:对二叉搜索树进行中序遍历,会得到升序序列
  • 既然是升序序列,所以最小差值一定在相邻值中出现,所以只需要使用pre记录当前节点root的前驱节点,记录差值进行比较,如果有更小的差值就更新
  • 最后返回结果即可

七【题目提示】

  • 树中节点的数目范围是 [ 2 , 100 ] 树中节点的数目范围是 [2, 100] 树中节点的数目范围是[2,100]
  • 0 < = N o d e . v a l < = 1 0 5 0 <= Node.val <= 10^5 0<=Node.val<=105

八【题目注意】

  • 本题与 530:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/ 相同

九【时间频度】

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n为传入二叉树的节点个数
  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n为传入二叉树的节点个数

十【代码实现】

  1. Java语言版
class Solution {

    TreeNode pre = null;
    int min = Integer.MAX_VALUE;

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

    public void inOrder(TreeNode root){
        if(root != null){
            inOrder(root.left);
            if(pre != null){
                min = Math.min(min,Math.abs(pre.val - root.val));
            }
            pre = root;
            inOrder(root.right);
        }
    }

}
  1. C语言版
void inOrder(struct TreeNode* root,int* pre,int* min)
{
    if(root != NULL)
    {
        inOrder(root->left,pre,min);
        if(*pre != -1)
        {
            *min = fmin(*min,abs(root->val - (*pre)));
        }
        *pre = root->val;
        inOrder(root->right,pre,min);
    }
}

int minDiffInBST(struct TreeNode* root)
{
    int* pre = -1;
    int min = INT_MAX;
    inOrder(root,&pre,&min);
    return min;
}
  1. Python语言版
class Solution:
    def minDiffInBST(self, root: Optional[TreeNode]) -> int:
        def inOrder(root):
            nonlocal res,pre
            if root != None:
                inOrder(root.left)
                if pre != -1:
                    res = min(res,abs(root.val - pre))
                pre = root.val
                inOrder(root.right)
        pre = -1
        res = float('inf')
        inOrder(root)
        return res
  1. C++语言版
class Solution {
public:
    void inOrder(TreeNode* root,int& pre,int& res)
    {
        if(root != nullptr)
        {
            inOrder(root->left,pre,res);
            if(pre != -1)
            {
                res = min(res,abs(root->val - pre));
            }
            pre = root->val;
            inOrder(root->right,pre,res);
        }
    }

    int minDiffInBST(TreeNode* root) 
    {
        int pre = -1;
        int res = INT_MAX;
        inOrder(root,pre,res);
        return res;
    }
};

十一【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/402120.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hands-on C++ Game Animation Programming阅读笔记(九)

Chapter 12: Blending between Animations This fade is usually short—a quarter of a second or less. (动画之间的fade一般很快&#xff0c;0.5s甚至更短) 本章重点&#xff1a; 两个Pose的Blending不同Animations的CrossFading&#xff0c;会有一个cross fade controller…

OpenCV入门(六)快速学会OpenCV5图像处理基础(二)像素处理

OpenCV入门&#xff08;六&#xff09;快速学会OpenCV5图像处理基础&#xff08;二&#xff09; 像素是图像构成的基本单位&#xff0c;像素处理是图像处理的基本操作&#xff0c;可以通过位置索引的形式对图像内的元素进行访问、处理。 1.二值化操作 需要说明的是&#xff…

2023年上半年北京杭州/广州深圳软考中/高级报名入口

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…

【人脸识别】ssd + opencv Eigenfaces 和 LBPH算法进行人脸监测和识别

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言ssd opencv Eigenfaces 和 LBPH算法进行人脸监测和识别1. ssd 目标监测2.opencv的三种人脸识别方法2.1 Eigenfaces2.2 LBPH前言 ssd opencv Eigenfaces 和 LB…

hadoop的补充配置与常用脚本

目录 历史服务器的配置&#xff1a; 添加配置&#xff1a; 分发集群&#xff1a; 日志聚集功能的配置&#xff1a; 添加配置&#xff1a; 分发配置给集群其他服务器&#xff1a; 集群的启动与停止&#xff1a; 整体启动和停止hdfs&#xff1a; 整体启动/停止YARN 启动…

微服务为什么要用到 API 网关?

本文介绍了 API 网关日志的价值&#xff0c;并以知名网关 Apache APISIX 为例&#xff0c;展示如何集成 API 网关日志。 作者程小兰&#xff0c;API7.ai 技术工程师&#xff0c;Apache APISIX Contributor。 原文链接 什么是微服务 微服务架构&#xff08;通常简称为微服务&a…

Promise.all、Promise.race、Promise.allSettled、Promise.any区别

1.Promise.all Promise.all()方法用于将多个 Promise 实例&#xff0c;包装成一个新的 Promise 实例。 const p Promise.all([p1, p2, p3]); p的状态由p1,p2,p3 决定&#xff0c;分成两种情况。 &#xff08;1&#xff09;只有p1、p2、p3的状态都变成fulfilled&#xff0c…

LeetCode - 42 接雨水

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 42. 接雨水 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例1 输入&…

金融交易行为监测方法——利用 CNN 模型实现行为识别

背景介绍在证劵交易所领域&#xff0c;曾经发生用户证券账号被盗事件&#xff0c;导致客户资产损失&#xff0c;例如&#xff1a;黑客获得了用户A的证券账号密码&#xff0c;利用多次的低买高卖将资产转移。本文中针对此类对敲欺诈的场景&#xff0c;采用将用户交易数据转换为图…

头脑风暴(一):Controller层前端传参接收;在Service层实现类中?为何要build相关构建器?添加套餐业务分析

文章目录1 MyBatis中Controller层List集合接收数据&#xff0c;泛型添加与否1.1 案例场景1.2 应该用什么接收1.3 是否可以用其他方式接收&#xff1f;1.4 LIst集合接收可否不指定泛型1.5 mybatis中使用基本类型接收数据&#xff1f;resultType是集合中的元素的类型&#xff0c;…

论文阅读笔记《GAMnet: Robust Feature Matching via Graph Adversarial-Matching Network》

核心思想 本文提出一种基于图对抗神经网络的图匹配算法&#xff08;GAMnet&#xff09;,使用图神经网络作为生成器分别生成源图和目标图的节点的特征&#xff0c;并用一个多层感知机作为辨别器来区分两个特征是否来自同一个图&#xff0c;通过对抗训练的办法提高生成器特征提取…

uniCloud基础使用-好文

云函数可以看做java或者php&#xff0c;作为后端服务cloudfunctions/myCloud/index.jsexports.main async (event, context) > {const { name, age } eventreturn 我是${name},今年${age} };pages/index/index.vue//callFunction方法 在前端和云端都可以调用另一个云函数 …

三十而立却被裁,打工人要如何应对职场危机?

又到金三银四就业季&#xff0c;对于部分职场人来说&#xff0c;年龄成为了他们找工作的最大限制。 因为绝大部分企业招聘中层干部以下岗位的时候&#xff0c;都会要求年龄不超过35周岁&#xff0c;再加上每年千万毕业生涌入社会&#xff0c;竞争程度相当激烈&#xff0c;这就导…

QML 模型(ListModel)

LIstModel&#xff08;列表模型&#xff09; ListModel 是ListElement定义的简单容器&#xff0c;每个定义都包含数据角色。内容可以在 QML 中动态定义或显式定义。 属性&#xff1a; count模型中数据条目的数量dynamic动态角色&#xff0c;默认情况下&#xff0c;角色的类型…

Android 进程间通信机制(一) IPC概念和模型

一. 前言 一直想把Binder机制认识清楚, 但是它涉及Android系统的Framework, Native, kernel层, 就需要你要有 C C基础阅读底层源码的能力, 目前笔者的水平,对Binder 在Native 和kernel层的实现原理和机制也是懵逼状态, 真的是博大精深, 故现阶段先把看懂和理解清楚的整理出来…

内核链表分析

内核链表 文章目录内核链表list_head创建链表添加节点1. list_add2. list_add_tail 接口删除节点宿主结构1.找出宿主结构 list_entry(ptr, type, member)2 container_of3. 宿主结构的遍历list_head 在 Linux 内核中&#xff0c;提供了一个用来创建双向循环链表的结构 list_hea…

海康摄像头使用RTSP

1.协议格式。海康威视IP摄像头rtsp协议地址如下&#xff1a;rtsp://[username]:[passwd][ip]:[port]/[codec]/[channel]/[subtype]/av_stream主码流&#xff1a;rtsp://admin:12345192.168.1.64:554/h264/ch1/main/av_streamrtsp://admin:12345192.168.1.64:554/MPEG-4/ch1/mai…

SpringCloud微服务保护

微服务保护微服务保护1.初识Sentinel1.1.雪崩问题及解决方案1.1.1.雪崩问题1.1.2.超时处理1.1.3.仓壁模式1.1.4.断路器1.1.5.限流1.1.6.总结1.2.服务保护技术对比1.3.Sentinel介绍和安装1.3.1.初识Sentinel1.3.2.安装Sentinel1.4.微服务整合Sentinel2.流量控制2.1.簇点链路2.1.…

java基础学习 day51 (匿名内部类)

1. 什么是匿名内部类&#xff1f; 隐藏了名字的内部类&#xff0c;实际名字为&#xff1a;外部类名$序号可以写在成员位置&#xff0c;为没有名字的成员内部类也可以写在局部位置&#xff0c;为没有名字的局部内部类 2. 匿名内部类的格式&#xff1f; new 类名/接口名() { 重…

深入理解AQS

概念设计初衷&#xff1a;该类利用 状态队列 实现了一个同步器&#xff0c;更多的是提供一些模板方法&#xff08;子类必须重写&#xff0c;不然会抛错&#xff09;。 设计功能&#xff1a;独占、共享模式两个核心&#xff0c;state、Queue2.1 statesetState、compareAndSetSta…