力扣 530. 二叉搜索树的最小绝对差 / 783. 二叉搜索树节点最小距离

news2025/3/1 3:03:51

题目来源

530:https://leetcode.cn/problems/minimum-absolute-difference-in-bst/description/

783: https://leetcode.cn/problems/minimum-distance-between-bst-nodes/

 

 

 C++题解1:递归法,中序遍历。通过中序遍历将二叉搜索树转化成递增数组,再寻找最小值就简单得多。

class Solution {
public:
    void zhongxu(TreeNode* node, vector<int>& nums) {
        if(!node) return;
        zhongxu(node->left, nums);
        nums.push_back(node->val);
        zhongxu(node->right, nums);
        return;
    }
    int getMinimumDifference(TreeNode* root) {
        vector<int> nums;
        zhongxu(root, nums);
        int len = nums.size();
        int res = nums[1] - nums[0];
        for(int i = 2; i < len; i++) {
            if(res > nums[i] - nums[i-1]) res = nums[i] - nums[i-1];
        }
        return res;
    }
};

C++题解2:在中序遍历中直接计算,用pre记录上一节点,就不用转换成数组。

class Solution {
private:
int result = INT_MAX;
TreeNode* pre = NULL;
void traversal(TreeNode* cur) {
    if (cur == NULL) return;
    traversal(cur->left);   // 左
    if (pre != NULL){       // 中
        result = min(result, cur->val - pre->val);
    }
    pre = cur; // 记录前一个
    traversal(cur->right);  // 右
}
public:
    int getMinimumDifference(TreeNode* root) {
        traversal(root);
        return result;
    }
};

C++题解3:迭代法,中序遍历。

class Solution {
public:
    int getMinimumDifference(TreeNode* root) {
        stack<TreeNode*> st;
        TreeNode* cur = root;
        TreeNode* pre = NULL;
        int result = INT_MAX;
        while (cur != NULL || !st.empty()) {
            if (cur != NULL) { // 指针来访问节点,访问到最底层
                st.push(cur); // 将访问的节点放进栈
                cur = cur->left;                // 左
            } else {
                cur = st.top();
                st.pop();
                if (pre != NULL) {              // 中
                    result = min(result, cur->val - pre->val);
                }
                pre = cur;
                cur = cur->right;               // 右
            }
        }
        return result;
    }
};

 

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

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

相关文章

【Android】Android类加载机制

ClassLoader介绍 任何一个 Java 程序都是由一个或多个 class 文件组成&#xff0c;在程序运行时&#xff0c;需要将 class 文件加载到 JVM 中才可以使用&#xff0c;负责加载这些 class 文件的就是 Java 的类加载机制。ClassLoader 的作用简单来说就是加载 class 文件&#xf…

echarts图表-实现中国地图的绘制

第一步&#xff1a;引入中国地图的json数据&#xff0c;初始化echarts的dom结构&#xff0c;使用registerMap方法加载地图数据&#xff08;注&#xff1a;echarts5.X版本后删除了中国地图的JSON&#xff0c;需自行下载JSON或降低echarts版本&#xff09; 第二步&#xff1a;传输…

React通过props的children实现插槽功能

可能会比较遗憾的说 React中并没有vue中的 slot 插槽概念 不过 可以通过props.children 实现类似功能 我们先创建一个React项目 在src下创建目录components 在下面创建一个dom.jsx组件 参考代码如下 import React from "react" export default class dom extends R…

Android学习日志 一、滚动视图的嵌套

文章目录 滚动视图的嵌套创建项目(前期准备)工程搭建编写XML正式代码 By-Round Moon 滚动视图的嵌套 说明:本博客是博主学习安卓开发的第一个案例。接下来会进行一系列的样例&#xff0c;含很多基础部分&#xff0c;各位观众老爷请见谅。 Android Studio 版本:2022.2.1 patch …

如何将MBR转为GUID?这方法易于使用且安全!

为什么要将MBR转为GUID(GPT)&#xff1f; MBR代表主引导记录&#xff0c;它使用Legacy BIOS分区表。而GPT磁盘&#xff0c;也就是GUID分区表的缩写&#xff0c;是一种引入了统一可扩展固件接口 (UEFI) 的新布局。GPT磁盘有2个主要优势&#xff1a; GPT磁盘每个分区…

前端-CSS 字体和文本样式

字体大小 /* 浏览器默认字体大小 16px */ font-size: 16px;<div style"font-size: 16px;">Hello World!</div> <div style"font-size: 26px;">Hello World!</div>字体粗细 font-weight: 400;<div style"font-weight: no…

JumpServer开源堡垒机页面配置

JumpServer开源堡垒机页面配置 一、登录二、功能模块2.1、控制台2.1.1、用户管理2.1.1.1、用户列表2.1.1.2、用户组 2.1.2、资产管理2.1.2.1、资产列表2.1.2.1.1、创建服务器链接2.1.2.1.2、创建数据库MySQL链接 2.1.2.2、网域列表2.1.2.3、平台列表2.1.2.4、标签列表 2.1.3、账…

同源建模MOE:请叫我永远的神!

同源建模 实/操/篇 1.分子力场的设置 MOE中缺省的分子力场MMFF94x是一个用于小分子和复合物模拟的力场,不能很好地适用于大分子模拟,由于这里我们要进行同源模建,模拟对象是蛋白质结构,因此首先要将缺省分子力场MMFF94x更改为适用于蛋白质模拟的相关分子力场&#xff0c;如A…

【PCL】Ouster 和 Velodyne 激光雷达的 PCL 点云数据格式

【PCL】Ouster 和 Velodyne 激光雷达的 PCL 点云数据格式 0 news1 Ouster2 Velodyne3 数据类型转换 0 news Ouster 和 Velodyne 两公司合并。 1 Ouster GitHub: Link namespace ouster_ros {struct EIGEN_ALIGN16 Point {PCL_ADD_POINT4D;float intensity;uint32_t t;uint16_t…

conda 根目录内存满,更换新的目录

默认conda环境是在根目录&#xff0c;只需修改默认的目录即可 1 修改.condarc文件 vim ~/.condarc# 添加一行即可 envs_dirs:- /disk3/miniconda_envs/envs2 验证 创建一个conda环境 查看创建的路径 conda env list 这样以后都换把相关创建的包安装在disk3下&#xff0c;缓…

C++ - 20230630

一 . 思维导图 二. #include <iostream> using namespace std;class Person { private:int age;int p; public://无参构造Person(){age 0;p 0;}//有参构造Person(int age,int p):age(age), p(p){}//拷贝构造函数Person(Person &other) {this->age other.age;t…

《移动互联网技术》第九章 感知与多媒体: 了解质感设计的基本原则和设计方法

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Tomcat 部署优化

目录 一.Tomcat介绍 二.了解Tomcat里面里面是放什么的 三. Tomcat&#xff1a;是一个特殊的服务 有两个领域 四.tomcat概述 五.再加上那个扩展java虚拟机&#xff08;JVM&#xff09; 调优 tomcat 优化分两种 六.Tomcat核心组件 ​编辑 容器&#xff1a;什么是容器 …

Dart语法01-变量、内置类型、操作符、方法与异常

Dart基础 文章目录 Dart基础变量final与const 内置的类型Numbers&#xff08;数值&#xff09;Strings&#xff08;字符串&#xff09;Booleans&#xff08;布尔值&#xff09;Lists&#xff08;列表&#xff09;Maps&#xff08;映射集合&#xff09;Runes&#xff08;用于在字…

用八叉树检测点云是否发生变化

检测点云数据集之间的空间变化有以下几个用处&#xff1a; 目标跟踪与物体识别&#xff1a;空间变化检测可以用于实时更新点云数据中的物体位置、姿态、形状等信息。这对于目标跟踪和物体识别非常重要&#xff0c;可以帮助我们在动态场景中准确地识别和跟踪物体&#xff0c;从而…

Maven下载安装及其配置

Maven下载安装及其配置 文章目录 Maven下载安装及其配置1、Maven介绍2、Maven下载安装2.1、最新2.2、旧版3.8 3、Maven环境配置3.1、配置3.2、验证3.3、 配置本地仓库 4、Maven使用4.1、Maven常用命令4.2、IDEA中的使用 1、Maven介绍 Maven 是一个流行的构建工具和依赖管理工具…

使用Excel和PowerPoint设计24小时甘特图

1.前期调研 可以使用Project软件、在线甘特图MindsUP等来设计&#xff0c;可是我的需求是记录周边几个单位每天的开闭馆时间&#xff0c;而不是按照天、月等来记录项目周期。因此&#xff0c;这些软件不符合我的需求&#xff0c;必须用excel来设计。 2.excel录入数据 &#xf…

云时代已至,新一代数据分析平台是如何实现的?

2023 年 5 月&#xff0c;由 Stackoverflow 发起的 2023 年度开发者调查数据显示&#xff0c;PostgreSQL 已经超越 MySQL 位居第一&#xff0c;成为开发人员首选。PostgreSQL 在国内的热度也越来越高。6 月 17 日&#xff0c;PostgreSQL 数据库技术峰会在成都顺利召开。本次大会…

深入理解 Golang: 锁

本文通过对 Go 中源码层面的加锁、解锁实现细则来介绍锁的操作&#xff0c;包括 Mutex 互斥锁、RWMutex 读写锁&#xff0c;以及它们底层依赖的 sema 信号锁。 atomic 原子操作 正常情况下&#xff0c;多个协程同时操作 num 时&#xff0c;不能保证 num 值得最终一致性&#x…

锈湖新作地铁繁花试玩版正式上线啦

地铁繁花是锈湖厂商新作点击式解谜冒险解谜游戏&#xff0c;英文名称为“Underground Blossom”&#xff0c;在游戏中你将深入锈湖的地下&#xff0c;扮演并追溯Laura Vanderboom的人生和记忆吧&#xff01;从一个车站到另一个车站&#xff0c;每个地铁站都象征着劳拉的一段过去…