文章目录

  • 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.删除二叉搜索树中的节点相关推荐

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

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

  2. _32LeetCode代码随想录算法训练营第三十二天-贪心算法 | 738.单调递增的数字 、714.买卖股票的最佳时机含手续费、968.监控二叉树

    _32LeetCode代码随想录算法训练营第三十二天-贪心算法 | 738.单调递增的数字 .714.买卖股票的最佳时机含手续费.968.监控二叉树 题目列表 738.单调递增的数字 714.买卖股票 ...

  3. 代码随想录算法训练营第十五天 | 层序遍历 10,226.翻转二叉树,101.对称二叉树 2

    代码随想录算法训练营第十五天 | 层序遍历 10,226.翻转二叉树,101.对称二叉树 2 1.1 层序遍历 10 1.1.1 102.二叉树的层序遍历 思路: 通过队列实现 class Solut ...

  4. 代码随想录算法训练营day1

    代码随想录算法训练营第一天| 704. 二分查找.27. 移除元素. 704.二分查找 题目链接:leetcode704 Binary search 暴力解法: class Solution {pub ...

  5. 代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和

    代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和 454.四数相加II 建议:本题是 使用map 巧妙解决的问题,好好体 ...

  6. 代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II。

    代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II. 977.有序数组的平方 209. 长度最小的子数组 59. 螺旋矩阵 II 977.有序数组的 ...

  7. 代码随想录算法训练营第二天 | 力扣977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II

    代码随想录算法训练营第二天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II 977.有序数组的平方 题目链接:有序数组的平方 题目描述: 给你一个按 非递减顺序 排序的整 ...

  8. 代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II

    代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II 一. LeetCode977.有序数组的平方 1. 题目链接[LeetCode9 ...

  9. _42LeetCode代码随想录算法训练营第四十二天-动态规划 | 121.买卖股票的最佳时机、122.买卖股票的最佳时机II

    _42LeetCode代码随想录算法训练营第四十二天-动态规划 | 121.买卖股票的最佳时机.122.买卖股票的最佳时机II 题目列表 121.买卖股票的最佳时机 122.买卖股票的最佳时机II 1 ...

最新文章

  1. Android Studio 使用Eclipse项目,仍保留项目结构,非导入转成gradle
  2. 方差、标准差、均方根误差
  3. 物联网技术在智慧消防中的应用
  4. 查表法实现反正切_关于python实现CRC32的应用和总结
  5. python写一段脚本代码自动完成输入(目录下的所有)文件的数据替换(修改数据和替换数据都是输入的)【转】...
  6. 如何安装使用MinDoc搭建个人在线wiki文档
  7. 数据太少怎么办?试试自监督学习,CV训练新利器,fast.ai新教程,LeCun点评
  8. 【和60】软件即服务的三重境界
  9. Nginx-windows
  10. java编程式事务_Spring编程式和声明式事务实例讲解
  11. Java同步组件之CyclicBarrier,ReentrantLock
  12. linux /dev/null用法
  13. 使用js制作完整轮播图 (解决最后一张切换到前面一张的动画问题)
  14. iOS 相机调用后为英文的解决办法
  15. 高维空间向量搜索---腾讯词向量相似检索实践
  16. iphone4s 关于大于400M的视频无法拷贝的问题
  17. css style 命名,CSS_CSS样式命名规范,命名一直是个让我头痛的问题 - phpStudy
  18. 学习笔记(12):A110测试-测试课程申请22
  19. 微信WeChatHelper3.1.0.72逆向-微信WeChatHelper3.1.0.72接口(WeChatHelper3.1.0.72.dll)-VC++调用实例方法(win32)
  20. 用人篇-曾国藩家书整理

热门文章

  1. Linux shell中的-d,-f,-e,-n的作用
  2. MTK 驱动开发(31)---Sensor 移植及调试(1)
  3. 转:智能手机Flash/DRAM选择、配置与价格大全
  4. Python3在win10 64位+PyCharm下打包兼容32位和64位wins的exe可执行文件
  5. 解决python各种包版本不匹配的通用方法
  6. 下载 Cisco Packet Tracer Mac OS版本也有
  7. 两万字摘录计算机博士生涯规划
  8. 英文学习20180124
  9. 【美团云】Tensorflow生成对抗网络(Generative Adversarial Networks)实战案例
  10. mybatis中如何在插入一条记录的同时获取id值