代码随想录训练营Day22:● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

本文主要是介绍代码随想录训练营Day22:● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

题目链接

https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/description/

题目描述

相较于前一天的题不同,昨天的题是二叉树,这次重点强调了是二叉搜索树
在这里插入图片描述

思路

1、迭代法

因为二叉搜索树本身就是有序的,所以不需要去管前中后序三种遍历方法,直接判断大小即可整体思路就是判断 p,q 节点的值与根节点的大小,如果同时小于根节点,那公共祖先就在根节点的左子树 如果同时大于根节点,那么公共祖先就在根节点的右子树, 如果根节点的值介于两个节点之间,说明根节点就是祖先

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {//迭代法if(root==null) return null;while (root!=null){if(root.val>p.val&&root.val>q.val){root = root.left;}else if(root.val<p.val&&root.val<q.val){root = root.right;}else {return root;}}return null;}
}

2、递归法

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root==null) return null;if(root.val>p.val&&root.val>q.val){return lowestCommonAncestor(root.left,p,q);}if(root.val<p.val&&root.val<q.val){return lowestCommonAncestor(root.right,p,q);}return root;}
}

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

题目链接

https://leetcode.cn/problems/insert-into-a-binary-search-tree/description/

题目描述

在这里插入图片描述

思路

public TreeNode insertIntoBST(TreeNode root, int val) {//递归方法//如果当前节点为空,说明此位置就是新节点将要插入的位置if(root==null) return new TreeNode(val);//如果根节点的值大于目标值,则向根节点的左侧递归//再判断如果根节点的左孩子不为空,继续递归,为空,就插入这里if(root.val>val){if(root.left!=null){insertIntoBST(root.left,val);}else {root.left = new TreeNode(val);}}//根节点大于目标值的思路类似上边if(root.val<val){if(root.right!=null){insertIntoBST(root.right,val);}else {root.right = new TreeNode(val);}}return root;
}

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

题目链接

https://leetcode.cn/problems/delete-node-in-a-bst/description/

题目描述

在这里插入图片描述

思路

第五种情况的处理逻辑:
在这里插入图片描述

class Solution {public TreeNode deleteNode(TreeNode root, int key) {//本题可以分为五种情况//1、没有找到想要删除的元素//2、找到了想要删除的元素,且删除的元素是叶子节点,即左右孩子均为空//3、找到了想要删除的元素,且删除的元素左孩子不为空右孩子为空//4、找到了想要删除的元素,且删除的元素左孩子为空右孩子不为空//5、找到了想要删除的元素,且删除的元素左右孩子均不为空if(root==null) return root;if(root.val==key){if(root.left==null&&root.right==null){return null;}else if(root.left!=null&&root.right==null){return root.left;}else if(root.left==null&&root.right!=null){return root.right;}else {TreeNode cur = root.right;while (cur.left!=null){cur = cur.left;}cur.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;}
}

这篇关于代码随想录训练营Day22:● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807042

相关文章

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log