代码随想录算法训练营第36期DAY24

DAY24

235二叉搜索树的最近公共祖先

迭代法:

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8.  * };
  9.  */
  10. class Solution {
  11. public:
  12.     TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
  13.         while(root)
  14.         {
  15.             if(root->val>p->val&&root->val>q->val) root=root->left;
  16.             else if(root->val<p->val&&root->val<q->val) root=root->right;
  17.             else return root;
  18.         }
  19.         return root;;
  20.     }
  21. };

递归:

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8.  * };
  9.  */
  10. class Solution {
  11. public:
  12.     TreeNode* finda(TreeNode* root,TreeNode* p,TreeNode* q)
  13.     {
  14.         if(root==NULLreturn root;
  15.         //递归边,所以要用变量接住他,带上if
  16.         if(root->val>p->val&&root->val>q->val)
  17.         {
  18.             TreeNode* left=finda(root->left,p,q);
  19.             if(left!=NULLreturn left;
  20.         }
  21.         if(root->val<p->val&&root->val<q->val)
  22.         {
  23.             TreeNode* right=finda(root->right,p,q);
  24.             if(right!=NULLreturn right;
  25.         }
  26.         return root;
  27.     }
  28.     TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
  29.         return finda(root,p,q);
  30.     }
  31. };

总结:

如果递归函数有返回值,如何区分要搜索一条边,还是搜索整个树?

  • 搜索一条边:

  • 搜素整个树:

本题就是标准的搜索一条边的写法,遇到递归函数的返回值,如果不为空,立刻返回。

701二叉搜索树中的插入操作

solution1:用父节点去接住他(新val)不会写。

找到插入的节点位置,直接让其父节点指向插入节点,结束递归,也是可以的。

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class Solution {
  13. private:
  14.     TreeNode* par;
  15.     void solu1(TreeNode* cur,int val){
  16.         //找到位置了
  17.         if(cur==nullptr){
  18.             TreeNode* node=new TreeNode(val);
  19.             if(par->val>val) par->left=node;
  20.             else par->right=node;
  21.             //加上终止!
  22.             return;
  23.         }
  24.         par=cur;
  25.         //递归函数里面有终止逻辑,这里不用单独接住他
  26.         if(cur->val>val) solu1(cur->left,val);
  27.         if(cur->val<val) solu1(cur->right,val);
  28.         return ;
  29.     }
  30. public
  31.     TreeNode* insertIntoBST(TreeNode* root, int val) {
  32.         par=new TreeNode(0);
  33.         if(root==nullptr){
  34.              TreeNode* res=new TreeNode(val);
  35.              return res;
  36.         }
  37.         solu1(root,val);
  38.         return root;
  39.     }
  40. };

solution2:遇到空,声明新节点并返回,让东西接住他。

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class Solution {
  13. public:
  14.     TreeNode* solu2(TreeNode* root,int val){
  15.         if(root==nullptr){
  16.             TreeNode* res=new TreeNode(val);
  17.             return res;
  18.         }
  19.         if(root->val>val){
  20.             root->left=solu2(root->left,val);
  21.         }
  22.         if(root->val<val){
  23.             root->right=solu2(root->right,val);
  24.         }
  25.         return root;
  26.     }
  27.     TreeNode* insertIntoBST(TreeNode* root, int val) {
  28.         return solu2(root,val);
  29.     }
  30. };

自己都没看懂solution2就通过了,递归真神奇难懂。

solution3:迭代法

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class Solution {
  13. public:
  14.     TreeNode* insertIntoBST(TreeNode* root, int val) {
  15.         if(root==nullptr){
  16.             TreeNode* node=new TreeNode(val);
  17.             return node;
  18.         }
  19.         TreeNode* par=root;
  20.         TreeNode* cur=root;
  21.         while(cur)
  22.         {
  23.             par=cur;
  24.             if(cur->val>val) cur=cur->left;
  25.             else  cur=cur->right;
  26.         }
  27.         TreeNode* res=new TreeNode(val);
  28.         if(par->val>val) par->left=res;
  29.         else par->right=res;
  30.         return root;
  31.     }
  32. };

450删除二叉搜索树中的节点

会做了!

详细见纸质笔记本。对递归的理解更加深刻了。

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class Solution {
  13. public:
  14.     TreeNode* deleteNode(TreeNode* root, int key) {
  15.         if(root==nullptr) return nullptr;
  16.         if(root->val==key)
  17.         {
  18.             if(root->left==nullptr&&root->right==nullptr) return nullptr;
  19.             else if(root->left!=nullptr&&root->right==nullptr) return root->left;
  20.             else if(root->left==nullptr&&root->right!=nullptr) return root->right;
  21.             else{
  22.                 TreeNode* cur=root->right;
  23.                 while(cur->left) cur=cur->left;
  24.                 cur->left=root->left;
  25.                 return root->right;
  26.             }
  27.         }
  28.         if(root->val>key) root->left=deleteNode(root->left,key);
  29.         if(root->val<key) root->right=deleteNode(root->right,key);
  30.         return root;
  31.     }
  32. };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/835499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年5月10日有感复盘

2024年5月10日有感复盘 时间 今天是一个很美好的一天&#xff0c;原因是很平凡&#xff0c;读书很平凡&#xff0c;玩游戏很平凡&#xff0c;然后生活很平凡&#xff0c;未来可期&#xff0c;听歌很舒服&#xff0c;很喜欢一个人呆在图书馆的感觉&#xff0c;很喜欢发呆&…

pytorch2ONNX时,AdaptiveAvgPool2d的相关问题

1、torchvision.models.vgg11_bn from torchsummary import summary import torch from torchvision import modelsdevice torch.device(cuda if torch.cuda.is_available() else cpu) model models.vgg11_bn(num_classes2).to(device)# 打印模型结构 backbone1 summary(mo…

DeepMind的首席执行官Demis Hassabis表示,未来一到两年内,能够独立完成复杂任务的AI代理将成为现实

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

根据指标体系数重排序算法

指标体系数 例子&#xff1a; 2 2.3 2.3.1 2.3.4 2.4 2.4.3 2.4.5 public static void changeOrderValueWithNaturalNumber(List<ExportAnnualDataDto> resultList) {if (org.apache.commons.collections4.CollectionUtils.isEmpty(resultList)){return;}// 序号按点分割…

会计之友杂志社投稿信箱邮箱

《会计之友》杂志杂志投稿信箱&#xff1a;kjzyzzhsh126.com 《会计之友》杂志杂志投稿信箱&#xff1a;kjzyzzhsh126.com 咨询电话&#xff1a;13356222771 咨询电话&#xff1a;13356222771 咨询电话&#xff1a;18366155179 咨询电话&#xff1a;18366155179 编辑在…

网络安全复习

概述 重要性 网络安全威胁 OSI安全体系结构 信息与网络安全目标 机密性完整性可用性 五类安全服务 八类安全机制 网络安全体系结构 基本安全设计原则 数据加密技术 2.1数据加密技术概述 2.2经典加密 2.3对称秘钥加密 2.4公开秘钥加密 Diffie-Hellman秘钥交换 对称…

MySQL入门学习-数据类型.文本字符串类型

MySQL中的文本字符串类型主要包括CHAR、VARCHAR、TEXT和BLOB四种类型。 一、文本字符串的特点、使用方法以及与其他类型的比较&#xff1a; 1. CHAR&#xff1a; - 特点&#xff1a;固定长度&#xff0c;最多可以存储255个字符。 - 使用方法&#xff1a;使用时需要指定长度&a…

【DDR 终端稳压器】Sink and Source DDR Termination Regulator [B]

正式从这里开始 TI 的选型&#xff1b; tps54116-q1 tps51200a-q1 TPS53317 典型电路 pin功能EN对于 DDR VTT 应用&#xff0c;请将 EN 连接到 SLP_S3 对于任何其他应用&#xff0c;请使用 EN 作为 ON/OFF 功能 始终保持 EN 电压等于或低于 VIN 电压GND信号接地 连接到输…

2024年成都市标杆场景项目申报条件对象、奖励和认定材料流程

一、申报条件 &#xff08;一&#xff09;申报主体需注册成立两年以上&#xff0c;具备独立法人资格&#xff0c;在成都有固定经营或者生产场地&#xff0c;上两年度主营业务收入年均1000万元以上或上两年度主营业务收入增长率年均10%以上&#xff1b; &#xff08;二&#x…

深度优先搜索(Depth-First Search, DFS)

深度优先搜索&#xff08;Depth-First Search, DFS&#xff09;是一种用于遍历或搜索树形结构&#xff08;如树、图等&#xff09;的算法。它沿着树的深度方向尽可能深地搜索&#xff0c;只有当当前分支无法继续深入时才回退到前一个节点&#xff0c;并尝试其他未被访问的分支。…

活字格中读取粘贴板中的内容:剪切板cp,我手机就吃这一亲!

哟,小伙伴们,今天我们来聊聊一个有趣的小功能吧! 你们应该都熟悉"复制粘贴"这个操作了吧?用CtrlC和CtrlV就可以将文字或图片等内容从一处复制到另一处,方便极了。但是,如果你的设备没有键盘,就没法使用快捷键了,那可怎么办呢? 别急,我们有解决办法!开发应用的时候…

【复利思维 + 项目成功方程式】用1年,超越别人38年!

复利思维—每天进步1%。 一年后会比现在的自己优秀38倍。在做任何事情时都要考虑&#xff0c;这件事是否能随着时间不断积累扩大&#xff0c;不能积累价值的事情要及时调整和止损。 在这个过程中&#xff0c;千万不要陷入心理暗示的陷阱&#xff0c;尤其是越想得到的&#xf…

JVM调参实践总结

JVM调优–理论篇从理论层面介绍了如何对JVM调优。这里再写一篇WIKI&#xff0c;尝试记录下JVM参数使用的最佳实践&#xff0c;注意&#xff0c;这里重点介绍HotSpot VM的调参&#xff0c;其他JVM的调参可以类比&#xff0c;但不可照搬。 Java版本选择 基于Java开发应用时&…

政安晨:【Keras机器学习示例演绎】(四十二)—— 使用 KerasNLP 和 tf.distribute 进行数据并行训练

目录 简介 导入 基本批量大小和学习率 计算按比例分配的批量大小和学习率 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在…

Excel日期数字转化成时间格式

1、5位数字转化成yyyy/mm/dd 要考虑闰年的小细节 // 输入数字转成日期&#xff08;5位&#xff0c;excel表格日期&#xff09;&#xff0c;默认转换成YYYY-MM-DD export function numberToDate(number, format) {if (number ! undefined) {let date new Date((number - 1) *…

IDEA中的常见注解

下面是对每个注解的详细解释&#xff1a; Override&#xff1a;这个注解用于标记一个方法覆盖或实现了父类或接口中的方法。如果一个方法标记为Override&#xff0c;但实际上没有覆盖或实现父类或接口中的方法&#xff0c;编译器会报错。 Deprecated&#xff1a;这个注解用于标…

机器学习求数组的迹

机器学习求数组的迹、也叫求矩阵的迹。 矩阵的迹&#xff0c;也称为迹数&#xff0c;是矩阵主对角线上所有元素的和。矩阵的迹具有以下重要性质&#xff1a;- 不变性&#xff1a;矩阵的迹在转置、加法、乘法等运算下保持不变。- 特征值关系&#xff1a;一个方阵的迹等于其所有特…

微服务全局异常处理

1.使用两个注解RestControllerAdvice 和 Excetionhandler(valueExcetption.class) 2.第一个注解RestcontrollerAdvice用于注解类&#xff0c;RestControllerAdvice可以捕获整个应用程序中抛出的异常&#xff0c;并对它们进行处理。这样可以实现在整个应用程序范围内统一处理异…

高标准农田建设项目天空地一体化智慧监管平台

一、建设背景 党中央、国务院高度重视高标准农田建设。国务院办公厅印发的《关于切实加强高标准农田建设提升国家粮食安全保障能力的意见》 明确提出&#xff0c;大力推进高标准农田建设&#xff0c;到2022年&#xff0c;建成10亿亩高标准农田&#xff0c;以此稳定保障1万亿斤以…

《C语言文件处理:从新手到高手的跃迁》

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…