代码随想录第二十二天

代码随想录第二十二天

    • Leetcode 235. 二叉搜索树的最近公共祖先
    • Leetcode 701. 二叉搜索树中的插入操作
    • Leetcode 450. 删除二叉搜索树中的节点

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

题目链接: 二叉搜索树的最近公共祖先
自己的思路:乍一看和二叉树的最近公共祖先类似,使用那个题的代码确实可以写出来,但是没有利用到二叉搜索树的性质;我们可以找出p和q结点值的较大者和较小者,遍历整个二叉树,如果出现了某个结点值位于两者之间,就是我们要找的结点;递归三部曲:1、终止条件:如果找到了位于两者之间的结点值,直接返回结点即可;2、传入参数:当前结点,p和q结点和最大值和最小值;3、单层逻辑:如果当前结点值大于最大值,向左递归,如果小于则向右递归,否则返回当前节点!!!

正确思路:递归!

代码:

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {int max = p.val>q.val?p.val:q.val;int min = p.val<q.val?p.val:q.val;return lowestCommonAncestor_new(root,p,q,max,min);}public TreeNode lowestCommonAncestor_new(TreeNode root,TreeNode p,TreeNode q,int max,int min){if (root.val>min&&root.val<max) return root;else if (root.val>max) return lowestCommonAncestor_new(root.left,p,q,max,min);else if (root.val<min) return lowestCommonAncestor_new(root.right,p,q,max,min);return root; }
}

复杂度分析
时间复杂度: O ( n ) \mathcal{O}(n) O(n)
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

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

题目链接: 二叉搜索树中的插入操作
自己的思路:没想到!!!

正确思路:这道题不要想复杂了,只需要把要插入的元素插入到叶子节点就可以,想通这点就可以了!!!递归三部曲:1、传入参数和返回值:当前节点、插入的节点值;返回插入之后的树的根节点;2、终止条件:当当前节点为空的时候,返回新建的节点,返回到上一个节点的左或者右节点,具体看下面;3、单层逻辑:当当前节点的值大于val的话,说明要插到左子树里面,返回值为root.left,因为是插到root的左子树里,否则插到右子树里,然后返回当前结点!!!!

代码:

class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {//插入到叶子节点上if (root==null) return new TreeNode(val);//当前节点的值大于val,就插到左子树上if (root.val>val){root.left = insertIntoBST(root.left,val);}if (root.val<val){root.right = insertIntoBST(root.right,val);}return root;}
}

复杂度分析
时间复杂度: O ( n ) \mathcal{O}(n) O(n)
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

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

题目链接: 删除二叉搜索树中的节点
自己的思路:没想到!!!!

正确思路:本题并不是遍历整个二叉搜索树,而是遍历到符合条件的二叉搜索树结点然后进行返回,所以本题递归终止条件较为繁琐;递归三部曲:1、传入参数和返回值:当前结点和key值;返回参数为删除之后的树的根节点;2、终止条件:当当前节点为空的时候,直接返回空,当当前结点的值等于key的时候,要分情况处理, ( 1 ) (1) (1):当当前节点为叶子节点时,直接返回空; ( 2 ) (2) (2):当当前节点左节点为空时,返回右节点; ( 3 ) (3) (3):当当前节点右节点为空时,返回左节点; ( 4 ) (4) (4):当左节点不为空,右节点也不为空时,要进行树的变换,我们以删除以后右节点上位为例,那么删除以后的左节点会放到右子树的最左边的非空节点下面即可;3、单层逻辑:左右递归,和二叉搜索树的插入类似!!!!

代码:

class Solution {public TreeNode deleteNode(TreeNode root, int key) {//终止条件if (root==null) return root;if (root.val==key){if (root.left==null&&root.right==null)  return null;else if (root.right==null) return root.left;else if (root.left==null) return root.right;else{TreeNode node = root.right;while(node.left!=null){node = node.left;}node.left = root.left;return root.right;}}//左右递归if (root.val>key) root.left = deleteNode(root.left,key);if (root.val<key) root.right = deleteNode(root.right,key);return root;}
}

复杂度分析
时间复杂度: O ( n ) \mathcal{O}(n) O(n)
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)

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

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

相关文章

SQL 上升的温度

197 上升的温度 SQL架构 表&#xff1a; Weather ---------------------- | Column Name | Type | ---------------------- | id | int | | recordDate | date | | temperature | int | ---------------------- id 是这个表的主键 该表包含特定日期的温度信息 编写一个 SQL …

事务@transactional执行产生重复数据

背景 系统设计之初&#xff0c;每次来新请求&#xff0c;业务层会先查询数据库&#xff0c;判断是否存在相同的id数据&#xff08;id是唯一标识产品的&#xff09;&#xff0c;有则返回当前数据库查到的数据&#xff0c;根据数据决定下一步动作&#xff0c;没有则认为是初次请…

销售自动化如何提高团队生产力?从这5个方面发力

任何用于减少人工劳动和缩短销售流程相关任务时间的技术&#xff0c;都可定义为销售自动化。 对于忙碌的销售人员来说&#xff0c;流程自动化是真正的救星。它可以使他们的工作简化30%&#xff0c;让他们更专注于创收任务。这将显著提高团队的工作效率&#xff0c;并带来许多其…

Kubernetes - kubeadm部署(二)

kubeadm 1. docker 和 containerd1.1 命令区分1.2 常用命令1.3 关于crictl 2. 示例2.1 部署nginx 先从一个报错开始吧 [rootnode-129 kubernetes]# crictl ps WARN[0000] runtime connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/…

滑动奇异频谱分析:数据驱动的非平稳信号分解工具(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

django中的model的一些笔记

class WarehouseRecordDetail(models.Model):warehouse_record models.ForeignKey(WarehouseRecord, verbose_nameu"出入库记录",related_namewarehouse_record_detail_ref_warehouse_record, on_deletemodels.PROTECT)warehouse_stock_record models.ForeignKey(W…

师承AI世界新星|7天获新加坡南洋理工大学访学邀请函

能够拜师在“人工智能10大新星”名下&#xff0c;必定可以学习到前沿技术&#xff0c;受益良多&#xff0c;本案例中的C老师无疑就是这个幸运儿。我们只用了7天时间就取得了这位AI新星导师的邀请函&#xff0c;最终C老师顺利获批CSC&#xff0c;如愿出国。 C老师背景&#xff1…

Leetcode刷题4

⼆叉树、BFS、堆、Top K、⼆叉搜索树、模拟、图算法 一、二叉树 二叉树的前序中序后序 二叉树节点定义 为了方便演示&#xff0c;我们先定义一个二叉树节点类。 class TreeNode:def __init__(self, val0, leftNone, rightNone):self.val valself.left leftself.right r…

数据结构C

数据结构 表 线性表 线性表是 具有相同数据类型的 n个数据元素 的有限序列&#xff08;有次序&#xff09;&#xff0c;其中n为表长&#xff0c;当n0时 线性表是一个空表。 若用L命名线性表&#xff0c;则其一般表示为 L {a1,a2,…,ai,ai1,…,an} 几个概念&#xff1a; …

Android ViewGroup onDraw为什么没调用

ViewGroup&#xff0c;它本身并没有任何可画的东西&#xff0c;它是一个透明的控件&#xff0c;因些并不会触发onDraw&#xff0c;但是你现在给LinearLayout设置一个背景色&#xff0c;其实这个背景色不管你设置成什么颜色&#xff0c;系统会认为&#xff0c;这个LinearLayout上…

[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)

在编程方面&#xff0c;从来都是实践出真知&#xff0c;书读百遍其义自见&#xff0c;所以实战是最好的提升自己编程能力的方式。 前一段时间&#xff0c;写了一些实战系列文章&#xff0c;如&#xff1a; ASP.NET MVC开发学生信息管理系统VueAntdvAsp.net WebApi开发学生信息…

R语言的水文、水环境模型优化技术及快速率定方法与多模型案例实践

在水利、环境、生态、机械以及航天等领域中&#xff0c;数学模型已经成为一种常用的技术手段。同时&#xff0c;为了提高模型的性能&#xff0c;减小模型误用带来的风险&#xff1b;模型的优化技术也被广泛用于模型的使用过程。模型参数的快速优化技术不但涉及到优化本身而且涉…

Python中的break和continue语句应用举例

Python中的break和continue语句应用举例 在进行Python编程时候&#xff0c;有时需要&#xff0c;对循环中断或跳过某部分语句&#xff0c;此时常会用到break语句或continue语句。本文将通过实际例子阐述这两个语句的用法。 1.break语句 break语句是实现在某个地方中断循环&a…

Java设计模式之行为型-迭代器模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析 五、总结 一、基础概念 迭代器模式是一种常用的设计模式&#xff0c;它主要用于遍历集合对象&#xff0c;提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不暴露该对象的内部表示。 举个简单的…

创建自定义 SpringBoot-Starter之email-spring-boot-starter

参考文章:【SpringBoot】之创建自定义 SpringBoot-Starter_springboot创建starter_王廷云的博客的博客-CSDN博客 源码包和jar: https://download.csdn.net/download/tiantangpw/88045999 自己写的starter;使用的apache-commons-email 包内包含源码和已打包的jar,亲测可用,可以…

5分钟给你破解这套10万赞的生产教程,访谈乔布斯的AI对话数字人视频是怎么做的

本期是赤辰第16期AI项目拆解栏目&#xff1b; 底部准备了7月粉丝福利&#xff0c;看完可以领取&#xff1b; 上周给粉丝们讲解AI动图说话月涨粉20万的案例并给出保姆式教程&#xff0c;粉丝反馈很热烈&#xff0c;都觉得AI强大&#xff0c;有些学员给自己账号做视频&#xff…

大数据与视频技术的融合趋势将带来怎样的场景应用?

视频技术和AI技术的融合是一种新兴的技术趋势&#xff0c;它将改变视频行业的运作方式。视频技术和AI技术的融合主要包括以下几个方面&#xff1a; 1&#xff09;人脸识别技术 人脸识别技术是AI技术的一个重要应用场景。它可以通过对视频中的人脸进行识别和分析&#xff0c;实…

3.9 Bootstrap 分页

文章目录 Bootstrap 分页分页&#xff08;Pagination&#xff09;默认的分页分页的状态分页的大小 翻页&#xff08;Pager&#xff09;默认的翻页对齐的链接翻页的状态 分页 Bootstrap 分页 本章将讲解 Bootstrap 支持的分页特性。分页&#xff08;Pagination&#xff09;&…

Unity平台如何实现RTSP转RTMP推送?

技术背景 Unity平台下&#xff0c;RTSP、RTMP播放和RTMP推送&#xff0c;甚至包括轻量级RTSP服务这块都不再赘述&#xff0c;今天探讨的一位开发者提到的问题&#xff0c;如果在Unity下&#xff0c;实现RTSP播放的同时&#xff0c;随时转RTMP推送出去&#xff1f; RTSP转RTMP…

浙大数据结构第四周之04-树6 Complete Binary Search Tree

题目详情&#xff1a; A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the nodes key.The right subtree of a node contains only nodes w…