代码随想录算法刷题训练营day22

代码随想录算法刷题训练营day22:LeetCode(236)二叉树的最近公共祖先、LeetCode(235) 二叉搜索树的最近公共祖先、LeetCode(701)二叉搜索树中的插入操作、LeetCode(450)删除二叉搜索树中的节点

LeetCode(236)二叉树的最近公共祖先
题目
在这里插入图片描述

代码

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {//判断终止----------采用后续遍历方法----从下往上遍历//1、根为空if(root==null){return null;}//2、判断左右子树的情况-----递归思想----返回null---即为没有if(root.val==p.val||root.val==q.val){return root;//返回当前的pq值---------上面判断的是返回值}//递归遍历----左右根//左右子树的处理逻辑----查看左右子树是否出现pq值----左右子树为空--的那种情况TreeNode leftTreeNode=lowestCommonAncestor(root.left, p, q);TreeNode rightTreeNode=lowestCommonAncestor(root.right, p, q);//处理根节点-----重点------下面是判断的是有没有if(leftTreeNode!=null&&rightTreeNode!=null){return root;//说明左右子树均找到p或者q的值}else if(leftTreeNode==null&&rightTreeNode!=null){return rightTreeNode;//有确定的了就不会发生变化了}else if(leftTreeNode!=null&&rightTreeNode==null){return leftTreeNode;}else{return null;}}
}

LeetCode(235) 二叉搜索树的最近公共祖先
题目
在这里插入图片描述

代码

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {//判断终止条件//终止条件1、若根节点为空的时候if(root==null){return root;}//终止条件2、若根节点为pq的某个值时----此时在遍历的时候就已经进行测试了if(root.val==p.val||root.val==q.val){return root;}//递归遍历//先左子树遍历---发现左子树是否包含p或者q值TreeNode leftTreeNode=lowestCommonAncestor(root.left, p, q);//同样遍历右子树TreeNode rightTreeNode=lowestCommonAncestor(root.right, p, q);//处理根节点if(leftTreeNode!=null&&rightTreeNode!=null){return root;}else if(leftTreeNode!=null&&rightTreeNode==null){return leftTreeNode;}else if(leftTreeNode==null&&rightTreeNode!=null){return rightTreeNode;}else{return null;//对应前面考虑到的左右子树均为空的情况----静心判断}}}

LeetCode(701)二叉搜索树中的插入操作
题目
在这里插入图片描述

代码

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {//在二叉搜索树上插入节点,因为仅在叶子节点上进行插入就能满足所有的插入情况---所以不需要改变树的结构//通过中序遍历+递归算法去做if(root==null){//此时为构造新节点占的位置TreeNode newNode=new TreeNode(val);return newNode;//把新子树创建出来,并返回回去}//进行判断,判断朝左右子树递归的方向if(root.val>val){root.left=insertIntoBST(root.left, val);//将判断后的值连上}if(root.val<val){root.right=insertIntoBST(root.right, val);//将判断后的右边的值返回回去---左右两边仅有一边的值进行返回}//连接完成之后,将根节点的值进行返回return root;//重点----仔细理解}
}

LeetCode(450)删除二叉搜索树中的节点
题目
在这里插入图片描述

代码

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode deleteNode(TreeNode root, int key) {//考虑删除节点情况-----一共分为五种情况/* * 1、没有找到删除节点* 2、删除节点为叶子节点* 3、删除节点有左子树,没有右子树* 4、删除节点有右子树,没有左子树* 5、删除节点既有左子树又有右子树*///递归算法+先序遍历----先处理根节点在处理左子树和右子树//递归的终止条件if(root==null){return null;//正常的终止条件------同时也是找不到删除节点的情况}//第二个终止条件----即找到要删除的元素if(root.val==key){//判断四种删除节点的情况//1、是叶子节点if(root.left==null&&root.right==null){return null;//返回为空,后面连接对应左子树或者右子树}else if(root.left!=null&&root.right==null){return root.left;//2、删除节点有左子树,没有右子树}else if(root.left==null&&root.right!=null){return root.right;//3、删除节点有右子树。没有左子树}else{//最复杂的一种情况---删除根节点的左右子树均不为空TreeNode currentNode=root.right;//找到右子树最左边的节点while (currentNode.left!=null) {currentNode=currentNode.left;}//将根节点的左子树拿出来currentNode.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;//最后将根节点返回//最后将根节点返回}}

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

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

相关文章

用例图:软件设计之旅的蓝图

用例图&#xff1a;软件设计之旅的蓝图 今天我们将探讨一个对于软件开发至关重要的主题——用例图。在软件开发过程中&#xff0c;用例图是一种静态结构图&#xff0c;用于描述系统的功能需求。它展示了参与者&#xff08;Actors&#xff09;如何与系统进行交互&#xff0c;以…

MyBatis进阶

目录 一、实现多表查询 二、#{}和${} 1、#{}和${}的使用 2、#{}和${}的区别 3、${}的使用场景 三、数据库连接池 1、数据库连接池概念 2、常见数据库连接池 3、修改连接池为Hikari 四、动态sql语句--xml 1、if标签 2、tirm标签 3、where标签 4、set标签 5、fore…

IT资讯——全速推进“AI+鸿蒙”战略布局!

文章目录 每日一句正能量前言坚持长期研发投入全速推进“AI鸿蒙”战略 人才战略新章落地持续加码核心技术生态建设 后记 每日一句正能量 人总要咽下一些委屈&#xff0c;然后一字不提的擦干眼泪往前走&#xff0c;没有人能像白纸一样没有故事&#xff0c;成长的代价就是失去原来…

【Qt学习】QLineEdit 控件 属性与实例(登录界面,验证密码,正则表达式)

文章目录 1. 介绍2. 实例使用2.1 登录界面2.2 对比两次密码是否相同2.3 通过按钮显示当前输入的密码&#xff08;并对2.2进行优化&#xff09;2.4 结语 3. 正则表达式3.1 QRegExp3.2 验证输入内容 4. 资源代码 1. 介绍 关于 QLineEdit 的详细介绍&#xff0c;可以去查阅官方文…

第2.1章 StarRocks表设计——概述

注&#xff1a;本篇文章阐述的是StarRocks-3.2版本的表设计相关内容。 建表是使用StarRocks非常重要的一环&#xff0c;规范化的表设计在某些场景下能使查询性能有数倍的提升。StarRocks的表设计涉及到的知识点主要包括数据表类型、数据分布&#xff08;分区分桶及排序键&#…

阿里云SSL免费证书到期自动申请部署程序

阿里云的免费证书只有3个月的有效期&#xff0c;不注意就过期了&#xff0c;还要手动申请然后部署&#xff0c;很是麻烦&#xff0c;于是写了这个小工具。上班期间抽空写的&#xff0c;没有仔细测试&#xff0c;可能存在一些问题&#xff0c;大家可以自己clone代码改改&#xf…

React基础-webpack+creact-react-app创建项目

学习视频&#xff1a;学习视频 2节&#xff1a;webpack工程化创建项目 2.1.webpack工程化工具&#xff1a;vite/rollup/turbopak; 实现组件的合并、压缩、打包等&#xff1b; 代码编译、兼容、校验等&#xff1b; 2.2.React工程化/组件开发 我们可以基于webpack自己去搭建…

短剧小程序开发,重塑视频观看体验的科技革命

随着科技的飞速发展&#xff0c;人们的娱乐方式也在不断变化。短剧小程序作为新兴的数字娱乐形式&#xff0c;以其独特的魅力和巨大的市场潜力&#xff0c;正逐渐成为科技与娱乐结合的代表。本文将探讨短剧小程序的发展背景、优势特点、开发流程以及未来展望。 一、短剧小程序…

一元函数积分学——刷题(4

目录 1.题目&#xff1a;2.解题思路和步骤&#xff1a;3.总结&#xff1a;小结&#xff1a; 1.题目&#xff1a; 2.解题思路和步骤&#xff1a; 把极限转化为积分&#xff0c;这里的1/n的n->∞极限就相当于dx&#xff0c;i/n就相当于x&#xff0c;从而合理推断&#xff1a;…

GitLab代码库提交量统计工具

1.说明 统计公司所有项目的提交情况&#xff0c;可指定分支和时间段&#xff0c;返回每个人的提交新增数、删除数和总数。 2.API 文档地址&#xff1a;http://公司gitlab域名/help/api/README.md 项目列表查询 返回示例&#xff1a; [{"id": 1, //项目ID"http…

【 buuctf-梅花香之苦寒来】

一张 图片&#xff0c;hex 看一下&#xff0c;发现一堆十六进制数&#xff0c;复制下来&#xff0c;转换成 ascii 可以去网站一步到位转换ASCII文本&#xff0c;十六进制&#xff0c;二进制&#xff0c;十进制&#xff0c;Base64转换器 也可以跑一个脚本&#xff0c;就是等着时…

跨越千年医学对话:用AI技术解锁中医古籍知识,构建能够精准问答的智能语言模型,成就专业级古籍解读助手(LLAMA)

跨越千年医学对话&#xff1a;用AI技术解锁中医古籍知识&#xff0c;构建能够精准问答的智能语言模型&#xff0c;成就专业级古籍解读助手&#xff08;LLAMA&#xff09; 介绍&#xff1a;首先在 Ziya-LLaMA-13B-V1基线模型的基础上加入中医教材、中医各类网站数据等语料库&am…