二叉树part8 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

news/2024/11/24 12:55:52/

文章目录

  • 235. 二叉搜索树的最近公共祖先
    • 思路
    • 代码
    • 困难
  • 701.二叉搜索树中的插入操作
    • 思路
    • 代码
  • 450.删除二叉搜索树中的节点
    • 思路
    • 代码
    • 困难
  • 今日收获


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

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

思路

不同于236普通二叉树,由于是二叉搜索树,只需要第一个遍历到小于q大于p的节点即可。使用只需要遍历一条边的递归方法,设置返回值,将递归函数return。
时间复杂度On

代码

func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {if root.Val>q.Val&&root.Val>p.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.二叉搜索树中的插入操作

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

思路

由于怎么插入都可以,不考虑改变二叉树结构的插入方法,直接插入空节点。

代码

func insertIntoBST(root *TreeNode, val int) *TreeNode {if root==nil{root=&TreeNode{}root.Val = valreturn root}if root.Val<val{root.Right=insertIntoBST(root.Right,val)}else{root.Left=insertIntoBST(root.Left,val)}return root
}

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

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

思路

确定单层递归的逻辑
这里就把二叉搜索树中删除节点遇到的情况都搞清楚。

有以下五种情况:

第一种情况:没找到删除的节点,遍历到空节点直接返回了
找到删除的节点
第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回NULL为根节点
第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点
第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点
第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。
着重考虑第五种情况。
时间复杂度On

代码

func deleteNode(root *TreeNode, key int) *TreeNode {if root==nil{return nil}if root.Val==key{if root.Left==nil{return root.Right}if root.Right==nil{return root.Left}temp:=root.Rightpre:=tempfor temp!=nil{pre=temptemp=temp.Left}pre.Left=root.Leftreturn root.Right}if root.Val<key{root.Right=deleteNode(root.Right,key)}if root.Val>key{root.Left=deleteNode(root.Left,key)}return root
}

困难

着重考虑删除节点的第五种情况。

temp:=root.Rightpre:=tempfor temp!=nil{pre=temptemp=temp.Left}pre.Left=root.Leftreturn root.Right

今日收获

了解了二叉搜索树只遍历一条边的递归方式。
了解了二叉搜索树的插入和删除


http://www.ppmy.cn/news/234198.html

相关文章

深入理解ChatGPT插件:competitorppcads、seoanalysis和kraftful

1. 引言 插件&#xff0c;作为一种扩展功能的工具&#xff0c;为我们的应用程序提供了无限的可能性。在ChatGPT中&#xff0c;我们有许多强大的插件&#xff0c;如competitorppcads、seoanalysis和kraftful。这篇博客将详细介绍这三个插件的功能和使用方法。 2. competitorpp…

探索AI插件:Visla、Public和linkReader的深度解析

I. 引言 在当今的数字化世界中&#xff0c;AI插件已经成为了我们日常生活和工作的重要组成部分。它们提供了一种简单而有效的方式&#xff0c;让我们能够利用先进的AI技术&#xff0c;来完成各种复杂的任务。在本文中&#xff0c;我们将深入探讨三个非常有用的AI插件&#xff…

DAY08_JavaScript

目录 1 JavaScript简介2 JavaScript引入方式2.1 内联脚本2.2 内部脚本2.3 外部脚本 3 JavaScript基础语法3.1 书写语法3.2 输出语句3.3 变量3.4 数据类型3.5 运算符3.5.1 \和区别3.5.2 类型转换 3.6 流程控制语句3.6.1 if 语句3.6.2 switch 语句3.6.3 for 循环语句3.6.4 while …

智慧PG集成开发平台pgting-cli发布了

介绍 两周前我们发布了智能页面搭建平台 —— 智慧PG(pgting)&#xff0c;深受用户青睐&#xff0c;很多用户尝试了在线开发组件。为了方便用户定制开发组件和组件共享&#xff0c;智慧PG设计之初就考虑了组件定制开发问题&#xff0c;为此&#xff0c;我们设计和研发了智慧PG…

android 10 流畅,目前最流畅10款安卓手机

不知不觉&#xff0c;2018年上半年已经过完&#xff0c;而一些总结类的报告也相继出炉&#xff0c;现在我们来看看鲁大师送出的2018年上半年手机圈的报告&#xff0c;榜单中的排名还是引起了不小的争议。 现在来看看鲁大师评出2018上半年最流畅手机UI Top10&#xff0c;排在第一…

Android软件TOP10排行榜

1. Advanced Task Killer Free &#xff08;应用程序管理器&#xff09;. 2. AP Mobile(新闻阅读器). 3. Astrid(计划清单程序). 4. Astro File Manager(文件管理器). 5. Bonsai Blast(游戏). 6. Dolphin Browser(浏览器). 7. doubleTwist Player(播放器). 8. Facebook(SNS应用…

android浏览器病毒,2018安卓手机杀毒软件排行榜

2018好用的手机杀毒软件有哪些&#xff1f; Android是最受欢迎的移动操作系统&#xff0c;安装在绝大多数的设备上&#xff0c;所以绝大多数移动恶意软件都针对xx的操作系统并不奇怪&#xff0c;而且通常恶意软件被隐藏在虚假应用程序中。因此&#xff0c;默认情况下&#xff0…

android系统流畅度排行,最流畅安卓手机排名:华为mate40Pro第六,第一堪比iOS!...

不可否认&#xff0c;苹果的iOS系统一直是手机行业的标杆&#xff0c;这些年安卓厂商们也在为追寻iOS的流畅度而努力&#xff0c;而随着120Hz屏幕刷新率等技术的普及之后&#xff0c;安卓手机在流畅度方面又上升了一级台阶。 日前&#xff0c;鲁大师发布了2020年度手机报告。在…