《代码随想录》Day20打卡!

《代码随想录》二叉树:二叉搜索树的最近公共祖先

本题的完整题目如下:

image.png

本题的思路如下: 1.之前写过一个二叉树的最近公共祖先,本题相比于另一道题,不同是本题是二叉搜索树,有一些可用的性质。 2.本题使用递归,所以分为三部曲: 3.第一步:确定递归函数的返回值和参数:返回值是二叉树的节点,参数是二叉树的根节点和两个目标节点。所以本题就使用主函数作为递归函数即可。 4.第二部:确定递归函数的终止条件:当当前节点就是p或者q时,说明该节点就是公共祖先,所以返回该节点即可。 5.第三步:确定单次递归函数中逻辑:当当前节点的值大于p与q的值时,则说明p和q只会在当前节点的左子树中出现,因为该树是二叉搜索树。当当前节点的值小于p和q的值时,则说明p和q只会在当前节点的右子树中出现,所以对该节点的右子树进行递归即可。如果不是上述两种情况,则说明p和q分别在当前节点的左子树和右子树,那么此时最近的公共祖先就是当前节点,此时直接返回当前节点即可。 6.本题要合理使用二叉搜索树的特性,会让题目变得简单一些。 本题的完整代码如下:

//235. 二叉搜索树的最近公共祖先
class Solution34 {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == p || root == q){return root;}else if(root.val > p.val && root.val > q.val){return lowestCommonAncestor(root.left, p, q);}else if(root.val < p.val && root.val < q.val){return lowestCommonAncestor(root.right, p, q);}else{return root;}}
}

《代码随想录》二叉树:二叉搜索树中的插入操作

本题的完整题目如下:

image.png

本题的完整思路如下: 1.首先,读题,题目中说了,插入的节点的值与二叉树中的值均不同。还有就是本题也是二叉搜索树。 2.递归三部曲: 3.第一步:确定递归函数的参数和返回值:参数是二叉树的根节点和要插入的值,返回值和插入之后的二叉搜索树的根节点,所以本题也是使用主方法作为递归方法。 4.第二部:确定递归函数的终止条件:当当前节点为空时,返回一个新的节点,该节点的值就是要插入的值。 5.第三步:确定递归函数的逻辑:当当前节点的值大于要插入的值时,说明该节点应该插入到当前节点的左子树中,所以让当前节点的左节点等于对当前节点的返回值递归调用的返回值。当当前节点的值小于要插入的值时,对当前节点的右子树进行递归调用并赋值给当前节点的右节点。最后返回root节点。 本题的完整代码如下: class Solution { public TreeNode insertIntoBST(TreeNode root, int val) { if(root == null){ return new TreeNode(val); }else if(root.val > val){ root.left = insertIntoBST(root.left, val); }else{ root.right = insertIntoBST(root.right, val); } return root;

}

}

《代码随想录》二叉树:删除二叉搜索树中的节点

本题的完整题目如下:

image.png

本题的完整思路如下: 1.本题较为困难,要合理利用二叉搜索树的特征。 2.本题也使用递归: 3.第一步:确定递归函数的返回值和参数:参数是二叉树的节点和要删除的节点的值,返回值是删除之后的二叉树的根节点,所以本题也是使用主方法作为递归方法。 4.第二部:确定递归函数的结束条件:当当前节点为空节点时,返回当前节点。 3.第三步:确定单次递归函数中的逻辑:如果当前节点的值大于要删除的值,就递归当前节点的左子树,如果小于,则递归当前节点的右子树。否则,说明当前节点就是要删除的节点:这种情况又分为以下几种情况:第一种:当当前节点为叶子节点即左子树和左子树皆为空节点时,直接删除即可,返回null;第二种:当当前节点的左子树为空时,右子树不为空时,就返回当前节点的右子节点;第三种:当当前节点的右子树为空,左子树不为空时,返回当前节点的左子节点;第四种:就是当前节点的左右子树均不为空时,删除当前节点有两种操作方法:就是将当前节点左节点或者右节点放到当前节点的位置上,一般是将右子树中的节点放到当前节点上:首先找到当前节点的右子树中值最小的节点,因为要将该节点作为右子树的根节点,那么该节点的值要小于右子树中所有节点的值。找到最小值的节点后,将该节点的值赋值给当前节点的值,此时并没有结束,因为接下来要删除右子树中刚刚找到的具有最小值的节点,所以此时继续递归调用当前节点的右子树,但是此时要删除节点的值为最小直节点的值,而不是题目中初始要删除的值。 4.本题较为困难,特别是,当当前节点就是要删除的节点时,并且当前节点的左右子树均不为空时,要找到右子树中的最小的值,接着修改当前节点的值,并且递归地删除右子树中最小值的节点,这里很难想到!!! 本题的完整代码如下:

//450.删除二叉搜索树中的节点
class Solution36 {public TreeNode deleteNode(TreeNode root, int key) {if(root == null){return root;}if(root.val > key) {root.left = deleteNode(root.left, key);}else if(root.val < key) {root.right = deleteNode(root.right, key);}else{// 找到需要删除的节点if (root.left == null && root.right == null) {// 1. 叶子节点:直接删除,返回 nullreturn null;} else if (root.left == null) {// 2. 只有右子树:返回右子树return root.right;} else if (root.right == null) {// 3. 只有左子树:返回左子树return root.left;}else{TreeNode temp = findMin(root.right);root.val = temp.val;root.right = deleteNode(root.right, temp.val);}}return root;}private TreeNode findMin(TreeNode node){while(node.left != null){node = node.left;}return node;}
}

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

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

相关文章

初识MySQL · 库的操作

目录 前言&#xff1a; 增 有关编码 删 查 改 前言&#xff1a; 由前文可得&#xff0c;MySQL是目前主流的数据库&#xff0c;mysql是客户端&#xff0c;mysqld是一种网络服务&#xff0c;mysqld是一种数据库服务&#xff0c;而对于数据库来说&#xff0c;是一种存储数据…

Idea创建JDK17的maven项目失败

Idea创建JDK17的maven项目失败 Error occurred during initialization of VM Could not find agent library instrument on the library path, with error: Can’t find dependent libraries Possible solution: Check your maven runner VM options. Open Maven Runner setti…

Go-知识 模板

Go-知识 模板 1. 介绍2. Text/template 包3. Html/template 包4. 模板语法4.1 模板标签4.2 添加注释4.3 访问变量4.4 访问方法4.5 模板变量4.6 访问函数4.7 数据渲染4.8 条件判断4.9 循环遍历4.10 嵌入子模板4.11 局部变量4.12 输出字符串4.13 预定义的全局函数4.14 比较函数 1…

优化租赁小程序提升服务效率与用户体验的策略与实践

内容概要 在这个快速发展的商业环境中&#xff0c;租赁小程序成为了提升服务效率和用户体验的重要工具。通过对用户需求的深入挖掘&#xff0c;我们发现他们对于功能的便捷性、响应速度和界面的友好性有着极高的期待。因此&#xff0c;针对这些需求&#xff0c;完善租赁小程序…

基础数据结构--二叉树

一、二叉树的定义 二叉树是 n( n > 0 ) 个结点组成的有限集合&#xff0c;这个集合要么是空集&#xff08;当 n 等于 0 时&#xff09;&#xff0c;要么是由一个根结点和两棵互不相交的二叉树组成。其中这两棵互不相交的二叉树被称为根结点的左子树和右子树。 如图所示&am…

shell学习变量(二)

这里写目录标题 一、概念1、环境变量2、本地变量3、系统变量 二、环境变量三、本地变量四、系统变量五、定义变量规则1、命名规则2、定义方式3、unset命令&#xff1a;删除变量 一、概念 1、环境变量 环境变量指的是再当前进程有效&#xff0c;并且能够被子进程调用&#xff…

自动驾驶3D目标检测综述(六)

停更了好久终于回来了&#xff08;其实是因为博主去备考期末了hh&#xff09; 这一篇接着&#xff08;五&#xff09;的第七章开始讲述第八章的内容。第八章主要介绍的是三维目标检测的高效标签。 目录 第八章 三维目标检测高效标签 一、域适应 &#xff08;一&#xff09;…

如何恢复永久删除的PPT文件?查看数据恢复教程!

可以恢复永久删除的PPT文件吗&#xff1f; Microsoft PowerPoint应用程序是一种应用广泛的演示程序&#xff0c;在人们的日常生活中经常使用。商人、官员、学生等在学习和工作中会使用PowerPoint做报告和演示。PowerPoint在人们的学习和工作生活中占主导地位&#xff0c;每天都…

四大自平衡树对比:AVL树、红黑树、B树与B+树

AVL树、红黑树、B树和B树的对比与应用场景 树系列相关文章&#xff08;置顶&#xff09; 1、从链表到平衡树&#xff1a;二叉查找树的退化与优化 2、自平衡二叉查找树&#xff1a;如何让二叉查找树始终保持高效 3、AVL树入门&#xff1a;理解自平衡二叉查找树的基础 4、红黑树全…

IOS safari 播放 mp4 遇到的坎儿

起因 事情的起因是调试 IOS 手机下播放服务器接口返回的 mp4 文件流失败。对于没调试过移动端和 Safari 的我来说着实费了些功夫&#xff0c;网上和AI也没有讲明白。好在最终大概理清楚了&#xff0c;在这里整理出来供有缘人参考。 问题 因为直接用 IOS 手机的浏览器打开页面…

Kubernetes Gateway API-2-跨命名空间路由

1 跨命名空间路由 Gateway API 具有跨命名空间路由的核心支持。当多个用户或团队共享底层网络基础设施时,这很有用,但必须对控制和配置进行分段,以尽量减少访问和容错域。 Gateway 和 Route(HTTPRoute,TCPRoute,GRPCRoute) 可以部署到不同的命名空间中,路由可以跨命名空间…

第十六届蓝桥杯模拟赛(第一期)(C语言)

判断质因数 如果一个数p是个质数&#xff0c;同时又是整数a的约数&#xff0c;则p称为a的一个质因数。 请问2024有多少个质因数。 了解 约数&#xff0c;又称因数。整数a整除整数b&#xff0c;b为a的因数&#xff08;约数&#xff09;质数&#xff0c;又称素数。只有1和它本身两…

AI安全的挑战:如何让人工智能变得更加可信

引言 随着人工智能&#xff08;AI&#xff09;技术在各个领域的广泛应用&#xff0c;尤其是在医疗、金融、自动驾驶和智能制造等行业&#xff0c;AI正在重塑我们的工作和生活方式。从提高生产效率到实现个性化服务&#xff0c;AI带来了前所未有的便利。然而&#xff0c;在享受这…

TiDB 的MPP架构概述

MPP架构介绍&#xff1a; 如图&#xff0c;TiDB Server 作为协调者&#xff0c;首先 TiDB Server 会把每个TiFlash 拥有的region 会在TiFlash上做交换&#xff0c;让表连接在一个TiFlash上。另外 TiFlash会作为计算节点&#xff0c;每个TiFlash都负责数据交换&#xff0c;表连接…

springboot499基于javaweb的城乡居民基本医疗信息管理系统(论文+源码)_kaic

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

【SQL Server】教材数据库(1)

1 利用sql建立教材数据库&#xff0c;并定义以下基本表&#xff1a; 学生&#xff08;学号&#xff0c;年龄&#xff0c;性别&#xff0c;系名&#xff09; 教材&#xff08;编号&#xff0c;书名&#xff0c;出版社编号&#xff0c;价格&#xff09; 订购&#xff08;学号…

RT-Thread中堆和栈怎么跟单片机内存相联系

现在RT-ThreadMCU的应用方式越来越普遍&#xff0c;RT-Thread需要配置MCU中的RAM到的系统中&#xff0c;进入系统内存管理&#xff0c;才能提供给基于实时系统的应用程序使用&#xff0c;比如给应用程序提供malloc、free等函数调用功能。在嵌入式软件开发中&#xff0c;我们经常…

Linux硬盘分区 --- fdisk命令MBR分区、添加硬盘、lsblk命令

一、MBR分区 如果想对硬盘进行分区可以使用“ fdisk ”命令&#xff0c;它会采用MBR格式将硬盘进行分区。MBR是传统的分区机制&#xff0c;支持 32 位和 64 位系统&#xff0c;最多只能创建 4 个主分区&#xff0c;或者 3 个主分区和 1 个扩展分区&#xff0c;只支持不超过 2T…

GraphRAG 框架哪家强?选择最适合你智能问答系统的框架

GraphRAG 框架哪家强&#xff1f;选择最适合你智能问答系统的框架 点击进入&#xff1a;GraphRAG系列文章-Nano-GraphRAG&#xff1a;打造轻量级医疗诊断助手 点击进入&#xff1a;GraphRAG系列文章-突破传统知识管理瓶颈&#xff1a;LlamaIndex GraphRAG 让企业知识问答更智能…

day-102 二进制矩阵中的最短路径

思路 BFS 解题过程 从起点依次向八个方向尝试&#xff08;之后也一样&#xff09;&#xff0c;如果某个位置在矩阵内且值为0且没有访问过&#xff0c;将其添加到一个队列中&#xff0c;依次类推&#xff0c;直到到达出口 Code class Solution {public int shortestPathBinar…