• 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相关推荐

  1. 力扣235|701|450

    235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode) 思路 不用改树结构,直接找到空结点位置插入 类似之前的二叉树的公共祖先,由二叉树最下面进行遍历,由下往上,特别关注的是二叉搜索树是一个 ...

  2. 代码随想录_二叉树_leetcode 701 450

    leetcode701. 二叉搜索树中的插入操作 701. 二叉搜索树中的插入操作 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树. 返回插入后二叉搜索 ...

  3. 代码随想录Day19 | LC235, 701, 450

    完全二叉树一定是平衡二叉树,堆的排序是父节点大于子节点,而搜索树是父节点大于左孩子,小于右孩子,所以堆不是平衡二叉搜索树 235. Lowest Common Ancestor of a Binary ...

  4. oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)

    oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等) oracle 字符集 GBK 没有问题 , UTF -8 需要修改一下 1.获得全拼 SELECT GETHZPY.GETHZFULLPY( ...

  5. 根据用户名字刷账户(取用户名的字母)

    最近由于手动创建用户过于繁琐,就写了个存储过程根据用户名字刷账户. 过滤多余的部分 由于一些名字代有别称,会有一些"("类的符号,所以需要过滤.这里如果有"(" ...

  6. 汉字转拼音函数 linux,oracle 汉字转拼音

    1.要有创建过程.函数的权限 -- grant create procedure to user; 2.在命令窗口中,执行以下语句,创建包 CREATE OR REPLACE package GetH ...

  7. 大一C语言图形界面点餐系统

    大一的C语言课设,希望能给学弟学妹们一些启发 首先,本程序基于easyx图形接口开发,运行前先下载easyx.h graphics.h 等头文件 百度云链接:https://pan.baidu.com ...

  8. ORACLE根据汉字获取拼音码:首字母/全拼/首字母截取

    create or replace package  GetHZPY is --oracle汉字转拼音 PACKAGE     --1.获得全拼  www.2cto.com   --SELECT GE ...

  9. ORACLE根据汉字返回拼音的包--强大

    1.发现原来的函数有一些汉字不能进行翻译,比喻说:横.衡:替换成新函数完美解决该类问题. 但是发现该函数遇到空值会异常,等于说没有做空值判断:发现该函数oracle R2 11G上运行 只能在gbk1 ...

最新文章

  1. DzzOffice增加应用对扩展名文件的支持设置,将会在Beta中提供。
  2. log--求自然对数
  3. [PHP] 遗传算法求函数最大值一般实现
  4. 使用nat技术实现tcp负载均衡
  5. tbase同步mysql_mysql主从同步
  6. 我们如何实现“业务 100% 云原生化,让阿里中间件全面升级到公共云架构”?
  7. Linux网络编程:原始套接字的魔力【续】
  8. java php serialize_PHP serialize 和 JSON 解析与区别
  9. 怎么判断一个机器可以跑多少用户和并发_美逛微信云发单机器人申请方法及其问题解答汇总...
  10. win10 Anaconda 安装教程
  11. TensorFlow 安装
  12. IOS:static和extern的使用
  13. linux中使用网易云音乐
  14. 旋转矩阵之到底顺时针还是逆时针
  15. Channel实现原理分析
  16. [轻笔记]Juliav0.6配置jupyter
  17. puts() 与 printf() 的对比
  18. 手机开热点,电脑连不上
  19. 塑胶模具设计-双色注塑模具设计36条经典经验分享
  20. bootstarp页脚代码

热门文章

  1. 日本演歌的杰作 - また君に恋してる
  2. JDBC连接mysql数据库及PrepareStatement的作用及原理
  3. 2023年软考成绩什么时候出?软考成绩公布时间间隔多久
  4. 麻将胡牌算法(遍历+剪枝)
  5. Java并发之AQS源码分析ReentranLock、ReentrantReadWriteLock、Condition
  6. 网络线路及带宽中CN2,GIA,CIA,BGP,CMI以及IPLC都是什么意思?
  7. Elasticsearch:如何使用 Elasticsearch ingest 节点来丰富日志和指标
  8. 计算机专业对于女生来说怎么样,计算机专业好不好女生学计算机有前途吗
  9. Redis第三话 – Springboot集成Redis以及常用API和客户端介绍
  10. 质因数分解求给定正整数的因数个数