day22 二叉树| 235,701,450
- 235. 二叉搜索树的最近公共祖先
- 可以按照二叉树的最近公共祖先进行操作
- 也可以按照搜索树的特征,无需进行回溯,从上到下进行遍历
- 701.二叉搜索树中的插入操作
- 将固定的数值插入到合适的位置
- 450.删除二叉搜索树中的节点
- 分几种情况
- 删除节点不存在
- 删除节点存在 且 左子树为空 右子树不为空
- 删除节点存在 且 左子树不为空 右子树为空
- 删除节点存在 且 左子树 右子树均都不为空 分别处理
- 分几种情况
package algor.trainingcamp;import algor.junior_algor.tree.TreeNode;/*** @author lizhe* @version 1.0* @description:* https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/* @date 2023/4/26 08:16* 235. 二叉搜索树的最近公共祖先* 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。** 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”** 来源:力扣(LeetCode)* 链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。*** 本题和二叉树的中序遍历不同,如果值的范围在p 和 q之间 说明是p和q的最近祖先* 如果root > p.val && root > q.val 需要在p的左子树寻找,* 如果root < p.val && root < q.val 需要在p的右子树寻找** 可以采用自顶向下寻找 无需回溯*/
public class LeetCode235 {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(null == root){return root;}//向左寻找if(root.val > p.val && root.val > q.val){TreeNode left = lowestCommonAncestor(root.left, p, q);if(left != null){return left;}}if(root.val < p.val && root.val < q.val){TreeNode right = lowestCommonAncestor(root.right, p, q);if(right != null){return right;}}return root;}
}
package algor.trainingcamp;import algor.junior_algor.tree.TreeNode;/*** @author lizhe* @version 1.0* @description:* 701. 二叉搜索树中的插入操作* 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。** 注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。** 来源:力扣(LeetCode)* 链接:https://leetcode.cn/problems/insert-into-a-binary-search-tree* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。* @date 2023/4/26 08:35** 需要将root插到合适的位置*/
public class LeetCode701 {public TreeNode insertIntoBST(TreeNode root, int val) {if(null == root){return new TreeNode(val);}if(root.val < val){root.right = insertIntoBST(root.right, val);}else{root.left = insertIntoBST(root.left, val);}return root;}
}
package algor.trainingcamp;import algor.junior_algor.tree.TreeNode;/*** @author lizhe* @version 1.0* @description: 450.删除二叉搜索树中的节点* @date 2023/4/26 08:57* <p>* 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。* <p>* 一般来说,删除节点可分为两个步骤:* <p>* 首先找到需要删除的节点; 如果找到了,删除它。 说明: 要求算法时间复杂度为 $O(h)$,h 为树的高度。* <p>* <p>* 删除节点不存在 直接返回空* 删除节点存在* * 左右孩子为空,直接删除节点 返回空* * 左孩子为空,删除节点,直接返回右孩子补位* * 右孩子为空,删除节点,直接返回左孩子补位* * 左右孩子均都不为空,则将删除节点的左孩子 放到待删除节点右孩子的最左 删除节点,返回待删除节点的右孩子* **/
public class LeetCode450 {public TreeNode deleteNode(TreeNode root, int key) {if (null == root) {return null;}if (root.val == key) {if (root.left == null && root.right == null) {return null;}if (root.left == null) {return root.right;}if (root.right == null) {return root.left;}if (null != root.left && null != root.right) {TreeNode 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);}else{root.right = deleteNode(root.right, key);}return root;}
}
day22 二叉树| 235,701,450相关推荐
- 力扣235|701|450
235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode) 思路 不用改树结构,直接找到空结点位置插入 类似之前的二叉树的公共祖先,由二叉树最下面进行遍历,由下往上,特别关注的是二叉搜索树是一个 ...
- 代码随想录_二叉树_leetcode 701 450
leetcode701. 二叉搜索树中的插入操作 701. 二叉搜索树中的插入操作 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树. 返回插入后二叉搜索 ...
- 代码随想录Day19 | LC235, 701, 450
完全二叉树一定是平衡二叉树,堆的排序是父节点大于子节点,而搜索树是父节点大于左孩子,小于右孩子,所以堆不是平衡二叉搜索树 235. Lowest Common Ancestor of a Binary ...
- oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)
oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等) oracle 字符集 GBK 没有问题 , UTF -8 需要修改一下 1.获得全拼 SELECT GETHZPY.GETHZFULLPY( ...
- 根据用户名字刷账户(取用户名的字母)
最近由于手动创建用户过于繁琐,就写了个存储过程根据用户名字刷账户. 过滤多余的部分 由于一些名字代有别称,会有一些"("类的符号,所以需要过滤.这里如果有"(" ...
- 汉字转拼音函数 linux,oracle 汉字转拼音
1.要有创建过程.函数的权限 -- grant create procedure to user; 2.在命令窗口中,执行以下语句,创建包 CREATE OR REPLACE package GetH ...
- 大一C语言图形界面点餐系统
大一的C语言课设,希望能给学弟学妹们一些启发 首先,本程序基于easyx图形接口开发,运行前先下载easyx.h graphics.h 等头文件 百度云链接:https://pan.baidu.com ...
- ORACLE根据汉字获取拼音码:首字母/全拼/首字母截取
create or replace package GetHZPY is --oracle汉字转拼音 PACKAGE --1.获得全拼 www.2cto.com --SELECT GE ...
- ORACLE根据汉字返回拼音的包--强大
1.发现原来的函数有一些汉字不能进行翻译,比喻说:横.衡:替换成新函数完美解决该类问题. 但是发现该函数遇到空值会异常,等于说没有做空值判断:发现该函数oracle R2 11G上运行 只能在gbk1 ...
最新文章
- 定制浏览器地址栏前的小图标
- Android Studio开发环境配置(win7)
- 怎么让修改的html持久化_redis持久化机制
- ASP.NET Core - Razor页面之Handlers处理方法
- 服务器设备日常维护与管理论文,浅谈设备管理与维护论文
- 动环监控系统接线图_机房动环监控系统报价
- 智能互联网之数据存储实践
- python路径规划仿真实验_【python实战】批量获得路径规划——高德地图API
- wps二次开发无法创建对象wps.application的解决方案
- linux分屏显示文件行数,linux常用命令集合1
- 联想服务器虚拟化解决方案,联想虚拟化解决方案
- GC root 解决了循环引用的垃圾回收问题
- 电脑如何远程控制挂机宝?影云挂机宝
- Python实现去除图片中的数字水印
- pythonSSL证书错误
- linux怎么撤销关机命令,一天一个Linux基础命令之关机命令shutdown
- 机器学习分支之一:强化学习
- cache line对内存访问的影响
- IMU参数对比(未完待续)
- (四)Bug的生命周期