代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
文章目录
- LeetCode 236. 二叉树的最近公共祖先
- 题目讲解
- 思路
- LeetCode 701.二叉搜索树中的插入操作
- 题目讲解
- 思路
- LeetCode 450.删除二叉搜索树中的节点
- 题目讲解
- 思路
- 示图
- 总结
- 既然还是要生活,那么就学会主宰生活
LeetCode 236. 二叉树的最近公共祖先
题目讲解
思路
求最小公共祖先,需要从底向上遍历,那么二叉树,只能通过后序遍历(即:回溯)实现从底向上的遍历方式。
在回溯的过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值(也就是代码中的left和right)做逻辑判断。
要理解如果返回值left为空,right不为空为什么要返回right,为什么可以用返回right传给上一层结果
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if( root==null || root ==p|| root== q){return root;}TreeNode left = lowestCommonAncestor(root.left,p,q);TreeNode right = lowestCommonAncestor(root.right,p,q);if( right== null&& left== null)return null;else if( left ==null && right !=null)return right;else if(right ==null &&left!=null)return left;elsereturn root;}
}
LeetCode 701.二叉搜索树中的插入操作
题目讲解
思路
只要遍历二叉搜索树,找到空节点 插入元素就可以了,那么这道题其实就简单了。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {if( root ==null){return new TreeNode(val);}if( val>root.val)root.right = insertIntoBST(root.right,val); if( val<root.val)root.left = insertIntoBST(root.left,val);return root;}
}
LeetCode 450.删除二叉搜索树中的节点
题目讲解
思路
分成了五种情况进行讨论
- 找不到要删除的点
- 删除的点为叶子节点
- 左节点 为空 右节点 不为空
if( root.left ==null) return root.right;
- 右节点为空, 左节点不为空
if( root.right ==null ) return root.left;
- 找到要删除的点 两边都是不为空
//先创建一个临时节点
TreeNode tmp = root.right
while( root.left !=null)
{tmp. left = root.left}root.val = tmp.val;root.right = delete( root.right,tmp.val);}return root;
上面是部分代码的梗概
示图
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public TreeNode deleteNode(TreeNode root, int key) {root =delete(root,key);return root;}public TreeNode delete(TreeNode root, int key){if( root ==null)return null;// 左搜索if( root.val> key)root.left = delete(root.left,key);//右搜索else if( root.val <key){root.right = delete(root.right,key);}else //平层的逻辑{if( root.left ==null) return root.right;if(root.right ==null ) return root.left;TreeNode temp = root.right;while(temp.left!=null){temp=temp.left;}root.val = temp.val;root.right = delete(root.right,temp.val);}return root;}
}
总结
既然还是要生活,那么就学会主宰生活
代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点相关推荐
- 二叉树part8 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
文章目录 235. 二叉搜索树的最近公共祖先 思路 代码 困难 701.二叉搜索树中的插入操作 思路 代码 450.删除二叉搜索树中的节点 思路 代码 困难 今日收获 235. 二叉搜索树的最近公共祖 ...
- _32LeetCode代码随想录算法训练营第三十二天-贪心算法 | 738.单调递增的数字 、714.买卖股票的最佳时机含手续费、968.监控二叉树
_32LeetCode代码随想录算法训练营第三十二天-贪心算法 | 738.单调递增的数字 .714.买卖股票的最佳时机含手续费.968.监控二叉树 题目列表 738.单调递增的数字 714.买卖股票 ...
- 代码随想录算法训练营第十五天 | 层序遍历 10,226.翻转二叉树,101.对称二叉树 2
代码随想录算法训练营第十五天 | 层序遍历 10,226.翻转二叉树,101.对称二叉树 2 1.1 层序遍历 10 1.1.1 102.二叉树的层序遍历 思路: 通过队列实现 class Solut ...
- 代码随想录算法训练营day1
代码随想录算法训练营第一天| 704. 二分查找.27. 移除元素. 704.二分查找 题目链接:leetcode704 Binary search 暴力解法: class Solution {pub ...
- 代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和
代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和 454.四数相加II 建议:本题是 使用map 巧妙解决的问题,好好体 ...
- 代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II。
代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II. 977.有序数组的平方 209. 长度最小的子数组 59. 螺旋矩阵 II 977.有序数组的 ...
- 代码随想录算法训练营第二天 | 力扣977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II
代码随想录算法训练营第二天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II 977.有序数组的平方 题目链接:有序数组的平方 题目描述: 给你一个按 非递减顺序 排序的整 ...
- 代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II
代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II 一. LeetCode977.有序数组的平方 1. 题目链接[LeetCode9 ...
- _42LeetCode代码随想录算法训练营第四十二天-动态规划 | 121.买卖股票的最佳时机、122.买卖股票的最佳时机II
_42LeetCode代码随想录算法训练营第四十二天-动态规划 | 121.买卖股票的最佳时机.122.买卖股票的最佳时机II 题目列表 121.买卖股票的最佳时机 122.买卖股票的最佳时机II 1 ...
最新文章
- Android Studio 使用Eclipse项目,仍保留项目结构,非导入转成gradle
- 方差、标准差、均方根误差
- 物联网技术在智慧消防中的应用
- 查表法实现反正切_关于python实现CRC32的应用和总结
- python写一段脚本代码自动完成输入(目录下的所有)文件的数据替换(修改数据和替换数据都是输入的)【转】...
- 如何安装使用MinDoc搭建个人在线wiki文档
- 数据太少怎么办?试试自监督学习,CV训练新利器,fast.ai新教程,LeCun点评
- 【和60】软件即服务的三重境界
- Nginx-windows
- java编程式事务_Spring编程式和声明式事务实例讲解
- Java同步组件之CyclicBarrier,ReentrantLock
- linux /dev/null用法
- 使用js制作完整轮播图 (解决最后一张切换到前面一张的动画问题)
- iOS 相机调用后为英文的解决办法
- 高维空间向量搜索---腾讯词向量相似检索实践
- iphone4s 关于大于400M的视频无法拷贝的问题
- css style 命名,CSS_CSS样式命名规范,命名一直是个让我头痛的问题 - phpStudy
- 学习笔记(12):A110测试-测试课程申请22
- 微信WeChatHelper3.1.0.72逆向-微信WeChatHelper3.1.0.72接口(WeChatHelper3.1.0.72.dll)-VC++调用实例方法(win32)
- 用人篇-曾国藩家书整理
热门文章
- Linux shell中的-d,-f,-e,-n的作用
- MTK 驱动开发(31)---Sensor 移植及调试(1)
- 转:智能手机Flash/DRAM选择、配置与价格大全
- Python3在win10 64位+PyCharm下打包兼容32位和64位wins的exe可执行文件
- 解决python各种包版本不匹配的通用方法
- 下载 Cisco Packet Tracer Mac OS版本也有
- 两万字摘录计算机博士生涯规划
- 英文学习20180124
- 【美团云】Tensorflow生成对抗网络(Generative Adversarial Networks)实战案例
- mybatis中如何在插入一条记录的同时获取id值