【代码随想录】算法训练计划21、22

day 21

1、530. 二叉搜索树的最小绝对差

题目:
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
在这里插入图片描述

思路:
  • 利用了二叉搜索树的中序遍历特性
  • 用了双指针,不用也可以
func getMinimumDifference(root *TreeNode) int {
    // 好简单,但是还是看了两眼题解,因为恐惧,下次要尝试脱离看题解了,代码一刷,中序遍历
    var pre *TreeNode
    min := math.MaxInt64
    var travel func(node *TreeNode) 
    travel = func(node *TreeNode) {
        if node == nil {
            return
        }
        travel(node.Left)
        if pre != nil && node.Val - pre.Val < min {
            min = node.Val - pre.Val
        }
        pre = node
        travel(node.Right)
    }
    travel(root)
    return min
}

2、501. 二叉搜索树中的众数

题目:
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。

思路:
  • 我第一次是自己写的,用的笨方法,遍历了两边map
  • 可以看看计数法,也很简单,但是不需要额外空间了,卡哥的文档有写
func findMode(root *TreeNode) []int {
    // 放进map
    map1 := make(map[int]int, 0)
    zs := []int{}
    var travel func(node *TreeNode) 
    travel = func(node *TreeNode) {
        if node == nil {
            return
        }
        travel(node.Left)
        map1[node.Val]++
        travel(node.Right)
    } 
    travel(root)
    a := 0
    for _,v := range map1 {
        if v > a {
            a = v
        }
    }
    for k,v := range map1 {
        if v == a {
            zs = append(zs, k)
        }
    }
    return zs
}

3、236. 二叉树的最近公共祖先

题目:
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
在这里插入图片描述

思路:
  • 代码一刷,后序遍历
  • 后序遍历很像回溯,注意节点
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
    // 代码一刷,后序遍历
    if root == nil {
        return root
    }
    if root == p || root == q {
        return root
    }
    left := lowestCommonAncestor(root.Left, p, q)
    right  := lowestCommonAncestor(root.Right, p, q)
    if left != nil && right != nil {
        return root
    }
    if left != nil {
        return left
    }
    if right != nil {
        return right
    }
    return nil
}

day 22

1、235. 二叉搜索树的最近公共祖先

题目:
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]
在这里插入图片描述

思路:
  • 利用二叉搜索树特点,注意最后是 <= 0
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
	//代码一刷
    if root == nil {
        return nil
    }
    for {
        if root.Val > q.Val && root.Val > p.Val {
            root = root.Left
        }
        if root.Val < q.Val && root.Val < p.Val {
            root = root.Right
        }
        if (root.Val - p.Val) * (root.Val - q.Val) <= 0 {
            return root
        }
    }
    return root
}

2、701. 二叉搜索树中的插入操作

题目:
给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。
在这里插入图片描述

思路:
  • 怎么我的写法就比卡尔的长了这么多代码
func insertIntoBST(root *TreeNode, val int) *TreeNode {
    if root == nil {
        return &TreeNode{Val:val}
    }
    travel(root,val)
    return root
}
func travel(node *TreeNode, val int) {
    if node == nil {
        return
    }
    if node.Val > val {
        if node.Left != nil {
            travel(node.Left, val)
        } else {
            node.Left = &TreeNode{Val:val}
            return
        }
    }
    if node.Val < val {
        if node.Right != nil {
            travel(node.Right, val)
        } else {
            node.Right = &TreeNode{Val:val}
            return
        }
    }
    return
}

3、450. 删除二叉搜索树中的节点

题目:
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
一般来说,删除节点可分为两个步骤:
首先找到需要删除的节点;
如果找到了,删除它。
在这里插入图片描述

思路:
  • 同样的,利用二叉树特性
func deleteNode(root *TreeNode, key int) *TreeNode {
    // 看卡哥视频写的代码可以,看不懂文档的代码
    if root == nil {
        return nil
    }
    if key == root.Val {
        if root.Left == nil && root.Right == nil {
            return nil
        }
        if root.Left != nil && root.Right == nil {
            return root.Left
        }
        if root.Right != nil && root.Left == nil {
            return root.Right
        }
        // 左右都不为空
        cur := root.Right
        for cur.Left != nil {
            cur = cur.Left
        }
        cur.Left = root.Left
        return root.Right
    }
    if key > root.Val {
        root.Right =  deleteNode(root.Right,key)
       
    }
    if key < root.Val {
        root.Left = deleteNode(root.Left,key)
    }
    return root
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM+Vue的校园共享单车管理系统

基于SSMVue的校园共享单车管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 登录界面 管理员界面 用户界面 摘要 随着城市交通的不断发展和人们出…

asp.net在线考试系统+sqlserver数据库

asp.net在线考试系统sqlserver数据库主要技术&#xff1a; 基于asp.net架构和sql server数据库 功能模块&#xff1a; 首页 登陆 用户角色 管理员&#xff08;对老师和学生用户的增删改查&#xff09;&#xff0c;老师&#xff08;题库管理 选择题添加 选择题查询 判断题添加…

74基于matlab的PSO-ELM的多输入,单输出结果预测,输出训练集和测试机预测结果及误差。

基于matlab的PSO-ELM的多输入&#xff0c;单输出结果预测&#xff0c;输出训练集和测试机预测结果及误差&#xff0c;适应度值。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 74matlabPSO-ELM多输入单输出 (xiaohongshu.com)

探索arkui(1)--- 布局(线性/层叠/弹性)

前端开发布局是指前端开发人员宣布他们开发的新网站或应用程序正式上线的活动。在前端开发布局中&#xff0c;开发人员通常会展示新网站或应用程序的设计、功能和用户体验&#xff0c;并向公众宣传新产品的特点和优势。前端开发布局通常是前端开发领域的重要事件&#xff0c;吸…

初始MySQL(七)(MySQL表类型和存储引擎,MySQL视图,MySQL用户管理)

目录 MySQL表类型和存储引擎 MyISAM MEMORY MySQL视图 我们先说说视图的是啥? 视图的一些使用细节 MySQL用户管理 原因 常见操作 MySQL表类型和存储引擎 -- 查看所有的存储引擎 SHOW ENGINES 我们常见的表有MyISAM InnoDB MEMORY 1.MyISAM不支持事务,也不支持外…

常见面试题-HashMap源码

了解 HashMap 源码吗&#xff1f; 参考文章&#xff1a;https://juejin.cn/post/6844903682664824845 https://blog.51cto.com/u_15344989/3655921 以下均为 jdk1.8 的 HashMap 讲解 首先&#xff0c;HashMap 的底层结构了解吗&#xff1f; 底层结构为&#xff1a;数组 链…

基于深度学习的活体人脸识别检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 活体人脸识别检测算法概述 4.2. 深度学习在活体人脸识别检测中的应用 4.3. 算法流程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 …

分形图案是什么?fpmarkets这样进入市场

分形图案的构造相对简单。市场在某个时间段内&#xff0c;会呈现单向的变动&#xff0c;要么持续上涨&#xff0c;要么持续下跌。观察这种趋势&#xff0c;并预测市场将呈现上涨态势后&#xff0c;过了一段时间&#xff0c;当所有有意向的买家都已经完成购买行为(即在价格上涨过…

CTFd-Web题目动态flag

CTFd-Web题目动态flag 1. dockerhub注册2. dockerfile编写3. 上传到docker仓库4. 靶场配置5. 动态flag实现 1. dockerhub注册 想要把我们的web题目容器上传到docker仓库中&#xff0c;我们需要dockerhub官网注册一个账号&#xff0c;网址如下 https://hub.docker.com/2. dock…

消息中间件概述

概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能&#xff0c;成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件&#xff0c;如ActiveMQ、RabbitMQ&#xff0c;Kafka&#xff0c;还有阿里…

MySQL和Oracle的区别有什么

1、mysql与oracle都是关系型数据库&#xff0c;应用于各种平台。 mysql开源免费的&#xff0c;而oracle则是收费的&#xff0c;并且价格非常高。 2、管理工具上 mysql的管理工具较少&#xff0c;在Linux下的管理工具的安装有时需要安装额外的包&#xff08;phpmyadmin&#…

Linux 无名管道实现文件复制

无名管道 通过一个管道&#xff08;假象&#xff09;进行传输数据&#xff0c;但是这个管道的传输方式是单工&#xff08;半双工&#xff09;的&#xff0c;就是这个管道允许进行发送和接受数据&#xff0c;不过不能同时进行。 创建无名管道 这里用到一个pipe&#xff08;&…

C语言求0—7所能组成的奇数个数

完整代码&#xff1a; // 求0—7所能组成的奇数个数 //根据题意&#xff0c;应该是没有重复数字的&#xff0c;所以最大只能为八位数 //如果可以重复的话&#xff0c;那么位数就限制不了&#xff0c;然后奇数的个数就是无穷大了 #include <stdio.h>int main() {int coun…

怎么用领英开发客户?分享领英开发客户的方法和技巧

对于绝大多数外贸业务员来说&#xff0c;领英(LinkedIn)是一个非常重要且有效的客户开发渠道。在领英这个平台&#xff0c;如果你掌握了开发客户的方法&#xff0c;那么营销推广产品或服务的终极目标就有很大可能的实现&#xff01;其实真正上手并不难&#xff0c;因为平台内有…

口袋参谋:一键查询任意买家旺旺号,规避被降权风险!

​ 对于淘宝天猫的卖家来说&#xff0c;查买家旺旺号是维护淘宝卖家销售权益的一种途径。 卖家通过查买家的旺旺号&#xff0c;从而得知买家的账号信息、买家信誉以及中差评等内容&#xff0c;减少淘宝卖家受骗上当的机率。 【查降权号】功能&#xff1a; 针对淘宝订单可一键查…

2024年山东省职业院校技能大赛中职组“网络安全”赛项竞赛试题-A

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A 一、竞赛时间 总计&#xff1a;360分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A、B模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略设置 A-3 流量完整性保护 A-4 …

【C++】入门二

下面我们说一下缺省参数&#xff0c;那么什么是缺省参数呢&#xff1f;就是说在定义或者声明函数时给形参赋予一个确定的值&#xff08;也叫缺省值&#xff09;&#xff0c;那么当我们调用这个函数的时候&#xff0c;就可以不传值也可以传值&#xff0c;传值的话缺省值就没作用…

什么是Selenium?如何使用Selenium进行自动化测试?

什么是 Selenium&#xff1f; Selenium 是一种开源工具&#xff0c;用于在 Web 浏览器上执行自动化测试&#xff08;使用任何 Web 浏览器进行 Web 应用程序测试&#xff09;。   等等&#xff0c;先别激动&#xff0c;让我再次重申一下&#xff0c;Selenium 仅可以测试Web应用…

微服务实战系列之Token

前言 什么是“Token”&#xff1f; 它是服务端生成的一串字符串&#xff0c;以作客户端进行请求的一个令牌&#xff0c;当第一次登录后&#xff0c;服务器生成一个Token便返回给客户端&#xff1b;以后客户端只携带此Token请求数据即可。 简言之&#xff0c;Token其实就是用户身…

大型语言模型中的幻觉研究综述:原理、分类、挑战和未决问题11.15+11.16+11.17

大型语言模型中的幻觉研究综述&#xff1a;原理、分类、挑战和未决问题11.15 摘要1 引言2 定义2.1 LLM2.3 大语言模型中的幻觉 3 幻觉的原因3.1 数据的幻觉3.1.1 有缺陷的数据源3.1.2 较差的数据利用率3.1.3 摘要 3.2 来自训练的幻觉3.2.1训练前的幻觉3.2.2来自对齐的幻觉3.2.3…