代码随想录训练营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

相关文章

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷