刷代码随想录有感(58):二叉树的最近公共祖先

题干:

代码:

class Solution {
public:TreeNode* traversal(TreeNode* root, TreeNode* p, TreeNode* q){if(root == NULL)return NULL;if(root == p || root == q)return root;TreeNode* left = traversal(root->left, p, q);TreeNode* right = traversal(root->right, p, q);if(left != NULL && right != NULL)return root;else if(left != NULL && right == NULL)return left;else if(left == NULL && right != NULL)return right;else return NULL;}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root == NULL)return NULL;return traversal(root ,p, q);}
};

思考:回溯思想总与二叉树的后序遍历挂钩;递归的return 不应该将其看为一个值,而应该是一个“响应”,来传递有没有找到信息。譬如:

if(root == p || root == q)return root;//意思是遇到p或q了,要将遇到pq的消息返回给上一层

这一行代码与下面五行相挂钩:

if(left != NULL && right != NULL)return root;//说明找到了pq,直接返回pq的root
else if(left != NULL && right == NULL)return left;//说明右边找不到pq而左边可以,将左向上返回
else if(left == NULL && right != NULL)return right;//说明左边找不到pq而右边可以,将右向上返回
else return NULL;//左右都为空,返回空

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

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

相关文章

NVIDIA Omniverse Cloud API支持数字孪生开发,可解决复杂AI问题 | 最新快讯

在全球范围内,价值超过 50 万亿美元的重工业市场,正在竞相实现数字化。 基于此,为帮助数字孪生技术更好地赋能千行百业,AI 企业 NVIDIA 在架构底层算力的同时,也搭建了 NVIDIA AI Enterprise 和 Omniverse 两大平台。 …

【UGUI】实现长按播放动画松手停止动画播放

场景部分,需要把角色和动画组件、动画控制器、动画片段准备好 然后设置好转换动画的参数RUN (bool类型的) 创建一个普通按钮在UGUI里面,为按钮添加组件EventTrgger 在这个组件里面添加PointerDown 和PointerUp 这两个分别代表按下和弹起! 他…

【Python小技巧】matplotlib不显示图像竟是numpy惹的祸

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、问题:df.plot() 显示不出图像二、尝试各种解决办法1. 增加matplotlib.use,设定GUI2. 升级matplotlib版本 三、numpy是个重要的库1. …

如何永久删除服务和相关文件夹

如何永久删除服务和文件夹? How can I remove the service and folder permanently? 以AlibabaProtect服务为例 takeown /f "C:\Program Files (x86)\AlibabaProtect sc delete AlibabaProtect我运行了上述操作,并通过任务管理器杀死了“阿里巴巴…

HTML5+CSS3+JS小实例:旋转渐变光标

实例:旋转渐变光标 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale…

python学习笔记-01

python 在学习之前要了解的事项&#xff1a; 1.python缩进语法要求较为严格 2.是解释型语言 3.python2版本和python3版本不兼容 本系列笔记全部基于python3 1.hello world 安装好python之后&#xff0c;可以直接打开python&#xff0c;也可以通过cmd进入python。 print(&qu…

LineVul实验复现及相关问题

最近在复现 LineVul 这篇文章的实验&#xff0c;本文主要用于简化文章复现流程和记录复现过程中出现的问题。 1 安装依赖环境 pip install gdown pip install transformers pip install captum pip install torch torchvision torchaudio pip install numpy pip install tqdm…

实用工具radsystems,十分钟完成项目的登入注册,增删改查

发了这么多文章&#xff0c;很多人不知道这些文章是在讲什么&#xff0c;今天我来介绍一下逆天神器radsystems radsystems是一个可以快速开发的软件&#xff0c;也可以二次开发&#xff08;之前文章有讲&#xff09; 它可以帮助我们快速完成开发&#xff0c;毫不夸张的讲&…

探秘Flex布局下子元素宽度超出的那些烦心事

嘿&#xff0c;小伙伴们&#xff01;你们有没有遇到过用Flex布局的时候&#xff0c;子元素的宽度莫名其妙地超出了父元素的情况&#xff1f;别着急&#xff0c;今天我就来给大家揭秘这个问题的来龙去脉&#xff0c;以及一些解决方案。让我们一起来深入探讨&#xff01; 发现问…

自然语言处理: RAT = CoT + RAG

Retrieval Augmented Thoughts (RAT) 是一种协同思维链 (CoT) 和检索增强生成 (RAG) 的 AI 提示策略&#xff0c;助力解决具有挑战性的长任务推理和生成。 RAG 有关于RAG的介绍可以参考我之前的博文: 自然语言处理: 第十五章RAG(Retrieval Augmented Generation) 开发能够像人…

DCEP数字人民币:中国法定区块链中数字货币

一、背景 作为全球第二大经济体&#xff0c;中国在数字货币领域的发展一直备受关注。近年来&#xff0c;中国政府积极推动数字货币的研究和试点工作&#xff0c;逐步开放数字货币交易试点&#xff0c;并计划推出中国唯一合法数字货币——数字人民币&#xff08;RMB Coin&#…

论文| Visual place recognition: A survey from deep learning perspective

2021-Visual place recognition: A survey from deep learning perspective

前端css中animation(动画)的使用

前端css中animation的使用 一、前言二、主要内容说明&#xff08;一&#xff09;、animation-name&#xff08;名称&#xff09;属性&#xff08;二&#xff09;、animation-duration&#xff08;持续时间&#xff09;属性1.前两个属性举例&#xff0c;源码12.源码1运行效果&am…

Redis线程模型

文章目录 &#x1f496; Redis 单线程模型⭐ 单线程监听大量的客户端连接⭐ Redis 6.0 之前为什么不用多线程&#xff1f; &#x1f496; Redis多线程⭐ Redis 后台线程⭐ Redis 网络IO多线程 对于读写命令来说&#xff0c;Redis 一直是单线程模型。不过&#xff0c;在 Redis 4…

SinoDB数据库的RAW TABLE

RAW表是不记录日志的永久表&#xff0c;类似于无日志模式数据库中的表。对于RAW表&#xff0c;支持对其进行更新、插入和删除操作&#xff0c;但日志是不会记录这些操作。可以在RAW表上定义索引&#xff0c;但不能在RAW表上定义唯一约束、主键约束或引用约束&#xff08;refere…

语音识别之特征提取与起始检测

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

关闭前端统一请求库设计与落地

前言 对于一个前端工程师而言&#xff0c;每天都在面对的较多的需求场景就是调用后端的接口&#xff0c;但是因为众所周知的原因&#xff0c;前端目前已经有无数种调用接口的方式&#xff0c;例如&#xff1a;之前有基于 XHR、Axios、Fetch 进行封装的工具&#xff0c;大家都试…

2-qt之信号与槽-简单实例讲解

前言、因实践课程讲解需求&#xff0c;简单介绍下qt的信号与槽。 一、了解信号与槽 怎样使用信号与槽&#xff1f; 概览 还记得 X-Window 上老旧的回调函数系统吗&#xff1f;通常它不是类型安全的并且很复杂。&#xff08;使用&#xff09;它&#xff08;会&#xff09;有很多…

prometheus+grafana的安装与部署及优点

一、Prometheus 的优点 1、非常少的外部依赖&#xff0c;安装使用超简单&#xff1b; 2、已经有非常多的系统集成 例如&#xff1a;docker HAProxy Nginx JMX等等&#xff1b; 3、服务自动化发现&#xff1b; 4、直接集成到代码&#xff1b; 5、设计思想是按照分布式、微服…

YashanDB与帆软信创商业智能软件完成兼容互认证

近日&#xff0c;深圳计算科学研究院崖山数据库系统YashanDB与帆软信创商业智能软件&#xff08;V6.0&#xff09;顺利完成兼容性互认证&#xff0c;经严格测试&#xff0c;双方产品能够相互兼容&#xff0c;稳定运行。 崖山数据库系统YashanDB是深圳计算科学研究院自主研发设计…