代码随想录算法训练营第二十二天|235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

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

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

递归法:

public class Solution {public TreeNode LowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root==null){return null;}if(root==p||root==q){return root;}var left=LowestCommonAncestor(root.left,p,q);var right=LowestCommonAncestor(root.right,p,q);if(left!=null&&right!=null){return root;}if(left==null&&right!=null){return right;}else if(left!=null&&right==null){return left;}elsereturn null;}
}

参考二叉树最近公共祖先流程。

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

递归法:

public class Solution {public TreeNode InsertIntoBST(TreeNode root, int val) {if(root==null){root=new TreeNode(val);}if(root.val>val){InsertIntoBST(root.left,val);}if(root.val<val){InsertIntoBST(root.right,val);}if(root.val>val&&root.left==null){root.left=new TreeNode(val);return root;}if(root.val<val&&root.right==null){root.right=new TreeNode(val);return root;}return root;}
}

如果根节点为空,直接在根节点处新建一个Val值得节点。得益于二叉搜索树的特性,如果Val值比根节点的值小,就去左子树插入,如果Val值比根节点的值大,就去右子树插入。如果当前节点的值大于Val并且当前节点的右节点为空就在左节点处新建一个Val值节点完成插入操作然后返回根节点,同理当前节点值小于Val且右节点为空就在右节点处插入该值,然后返回根节点。

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

递归法:

public class Solution {public TreeNode DeleteNode(TreeNode root, int key) {if(root==null){return null;}if(key==root.val){if(root.left==null&&root.right==null){return null;}if(root.left!=null&&root.right==null){return root.left;}if(root.left==null&&root.right!=null){return root.right;}if(root.left!=null&&root.right!=null){var 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;}
}

根节点如果为空,直接返回空。如果当前节点等于Key值,则分为以下几种情况:当前节点为叶子节点直接向上返回Null即可,当前节点左节点不为空右节点为空,直接往上返回左节点,当前节点右节点不为空左节点为空,则往上返回右节点。如果当前节点的左右节点都不为空,那就新建一个节点Cur指向右节点然后将Cur向左遍历到叶子结点,接着将该节点的左节点赋值给Cur的左节点,然后向上返回当前节点的右节点即可。得益于二叉搜索树的特性,如果Key值大于当前节点的值则向右进行递归操作,反之往左递归。

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



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

相关文章

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

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