二叉树part8 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
文章目录
- 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
今日收获
了解了二叉搜索树只遍历一条边的递归方式。
了解了二叉搜索树的插入和删除。
二叉树part8 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点相关推荐
- 代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
文章目录 LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 LeetCode 701.二叉搜索树中的插入操作 题目讲解 思路 LeetCode 450.删除二叉搜索树中的节点 题目讲解 ...
- 【LeetCode】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
[LeetCode]剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 一.迭代 二.递归 祖先的定义 ...
- leetcode 235. 二叉搜索树的最近公共祖先(Java版,树形dp套路)
题目 原题地址:leetcode 235. 二叉搜索树的最近公共祖先 说明: 所有节点的值都是唯一的. p.q 为不同节点且均存在于给定的二叉搜索树中. 题解 关于 树形dp 套路,可以参考我的另一篇 ...
- [剑指offer]面试题第[68-1]题[Leedcode][JAVA][第235题][二叉搜索树的最近公共祖先][递归][BFS]
[问题描述][第235题][二叉搜索树的最近公共祖先][简单] 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p. ...
- 二叉搜索树的最近公共祖先、二叉树的最近公共祖先
目录 二叉搜索树的最近公共祖先(力扣:235) 二叉树的最近公共祖先(力扣:236) 二叉搜索树的最近公共祖先 题目 二叉搜索树的最近公共祖先(力扣:235) 给定一个二叉搜索树, 找到该树中两个指定 ...
- ( “树” 之 BST) 235. 二叉搜索树的最近公共祖先 ——【Leetcode每日一题】
二叉查找树(BST):根节点大于等于左子树所有节点,小于等于右子树所有节点. 二叉查找树中序遍历有序. 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. ...
- LeetCode 235: 二叉搜索树的最近公共祖先
二叉搜索树的最近公共祖先 题目描述: 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一 ...
- 二叉树(二):判断是不是二叉搜索树、判断是不是完全二叉树、判断是不是平衡二叉树、二叉搜索树的最近公共祖先、在二叉搜索树中找到两个节点的最近公共祖先、序列化二叉树、重建二叉树、输出二叉树的右视图
目录 一.判断是不是二叉搜索树 1.1 题目 1.2 题解 二.判断是不是完全二叉树 2.1 题目 2.2 题解 三.判断是不是平衡二叉树 3.1 题目 3.2 题解 四.二叉搜索树的最近公共祖先 4 ...
- [剑指offer]面试题第[68-2]题[Leetcode][第236题][JAVA][二叉搜索树的最近公共祖先][递归]
[问题描述][中等] 235/68-1 搜索二叉树 236/68-2 二叉树 [解答思路] 递归 时间复杂度:O(N) 空间复杂度:O(N) 情况 1. , 2. , 3. , 4. 的展开写法如下. ...
最新文章
- SAP MM 盘点流程中上不了台面却很实用的方案建议
- 微软开源 Quantum Katas,领先的量子编程解决方案
- ML之PLiR之LARS:利用LARS算法求解ElasticNet回归类型(包括类别编码+属性重要程度排序)问题(实数值年龄预测)
- boost::polygon模块实现自定义点相关的测试程序
- Linux-No.04 Linux 设置定时任务发送邮件功能
- python3小游戏源代码_Python3制作仿“FlappyBird”小游戏|python3教程|python入门|python教程...
- UVA 662 Fast Food
- instagram技术_Instagram9位科技女孩进行技术采访的主要技巧
- 独家披露51CTO被黑过程:数据库已小范围流传
- 推荐几本lisp的书.
- 解决SqlServer添加维护计划时出现“代理XP组件已作为此服务器安全配置的一部分被关闭。系统管理员可以使用……”
- then是java关键字吗_then是java关键字吗
- NLP算法工程师,基本技术能力要求有哪些?
- 验证OpenVino时,找不到指定模块的解决
- html怎么实现聊天界面设计,纯css制作仿微信聊天页面
- 微信公众平台接口调试工具——蓝牙设备调试篇
- 程序设计天梯赛2021年选拔 L2-4红豆 (什么完全树给定后序遍历)
- 混合波束成形matlab,探索 5G 系统的混合波束成形架构
- 【临沂seo首选】增长|聊聊抖音SEO
- Template for Publisher and Subscriber