C++算法练习-day45——236.二叉树的最近公共祖先

题目来源:. - 力扣(LeetCode)

题目思路分析

题目要求在一个二叉树中找到两个给定节点的最低公共祖先(Lowest Common Ancestor, LCA)。最低公共祖先是指在树中同时包含两个给定节点的所有节点中,深度最大的那个节点。这意味着从该节点出发,能够同时到达这两个给定的节点。

思路

  1. 递归搜索:利用递归遍历树的每个节点,判断给定的两个节点是否在当前节点的左右子树中。
  2. 边界条件
    • 如果当前节点为空,或者当前节点就是给定的节点之一,直接返回当前节点。
    • 如果在左子树中找到了一个节点,而在右子树中没有找到另一个节点,则左子树的返回值即为LCA;反之亦然。
    • 如果在两个子树中都找到了这两个节点,那么当前节点即为LCA。

代码:

/**  * Definition for a binary tree node.  * struct TreeNode {  *     int val;  *     TreeNode *left;  *     TreeNode *right;  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}  * };  */  
class Solution {  
public:  // 函数定义:找到p和q的最低公共祖先  TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {  // 边界条件:如果当前节点为空,或者当前节点就是p或q,返回当前节点  if(!root || root == p || root == q){  return root;  }  // 在左子树中递归查找p和q的LCA  TreeNode* left = lowestCommonAncestor(root->left, p, q);  // 在右子树中递归查找p和q的LCA  TreeNode* right = lowestCommonAncestor(root->right, p, q);  // 如果左子树返回null,说明p和q都在右子树中,返回右子树的结果  if(!left){  return right;  }  // 如果右子树返回null,说明p和q都在左子树中,返回左子树的结果  if(!right){  return left;  }  // 如果左右子树都不为空,说明p和q分别位于当前节点的左右两侧,当前节点即为LCA  return root;  }  
};

知识点摘要

  1. 二叉树的基本概念:节点、左子树、右子树、根节点等。
  2. 递归算法:通过函数调用自身来解决问题,特别适合树结构的问题。
  3. 边界条件处理:在递归中处理各种可能的边界情况,确保算法的正确性。

通过本题,我们学会了如何在二叉树中利用递归方法找到两个节点的最低公共祖先。这种方法的核心在于通过递归遍历树的每个节点,并判断给定的两个节点是否在当前节点的左右子树中。根据这个判断,我们可以确定当前节点是否是LCA。本题不仅考察了对二叉树的理解,还考察了递归算法的应用以及边界条件的处理。希望读者能够通过本题加深对二叉树和递归算法的理解,并在未来的编程实践中灵活运用这些知识。

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

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

相关文章

think php处理 异步 url 请求 记录

1、需求 某网站 需要 AI生成音乐,生成mp3文件的时候需要等待,需要程序中实时监听mp3文件是否生成 2、用的开发框架 为php 3、文件结构 配置路由设置 Route::group(/music, function () {Route::post(/musicLyrics, AiMusic/musicLyrics);//Ai生成歌词流式…

【VRChat 改模】开发环境搭建:VCC、VRChat SDK、Unity 等环境配置

一、配置 Unity 相关 1.下载 UnityHub 下载地址:https://unity.com/download 安装打开后如图所示: 2.下载 VRChat 官方推荐版本的 Unity 跳转界面(VRChat 官方推荐页面):https://creators.vrchat.com/sdk/upgrade/…

AJAX 实时搜索

AJAX 实时搜索 AJAX(Asynchronous JavaScript and XML)实时搜索是一种无需刷新整个网页就能从服务器获取数据并在网页上展示的技术。这种技术极大地提升了用户体验,尤其是在搜索引擎、在线购物网站、社交媒体平台等应用中。本文将详细介绍AJ…

ollama部署bge-m3,并实现与dify平台对接

概述 这几天为了写技术博客,各种组件可谓是装了卸,卸了装,只想复现一些东西,确保你们看到的东西都是可以复现的。 (看在我这么认真的份上,求个关注啊,拜托各位观众老爷了。) 这不,为了实验在windows上docker里运行pytorch,把docker重装了。 dify也得重装: Dify基…

详细介绍HTTP与RPC:为什么有了HTTP,还需要RPC?

目录 一、HTTP 二、RPC 介绍 工作原理 核心功能 如何服务寻址 如何进行序列化和反序列化 如何网络传输 基于 TCP 协议的 RPC 调用 基于 HTTP 协议的 RPC 调用 实现方式 优点和缺点 使用场景 常见框架 示例 三、问题 问题一:是先有HTTP还是先有RPC&…

Paddle Inference部署推理(十五)

十五:Paddle Inference推理 (python)API详解 枚举类型 DataType DataType 定义了 Tensor 的数据类型,由传入 Tensor 的 numpy 数组类型确定。 # DataType 枚举定义 class paddle.inference.DataType:# 获取各个 DataType 对应…

blender 视频背景

准备视频文件 首先,确保你有想要用作背景的视频文件。视频格式最好是 Blender 能够很好兼容的,如 MP4 等常见格式。 创建一个新的 Blender 场景或打开现有场景 打开 Blender 软件后,你可以新建一个场景(通过点击 “文件” - “新建…

Elasticsearch与NLP的深度融合:文本嵌入与向量搜索实战指南

Elasticsearch与NLP的深度融合:文本嵌入与向量搜索实战指南 引言 在当今信息爆炸的时代,如何从海量文本数据中快速准确地检索出相关信息,成为了一个迫切需要解决的问题。自然语言处理(NLP)技术的发展为这一挑战提供了新的解决方案。Elasticsearch,作为一个强大的搜索引…

Lesson 10 GNN

听课(李宏毅老师的)笔记,方便梳理框架,以作复习之用。本节课主要讲了生成式对抗网络(GNN)。 目录 Generation Network as Generator 到目前为止,我们学习到的是类似于函数的network&#xf…

Delphi 内置的用于 SOAP WebService 的数据类型定义

记录一下备查。 数据定义在这个单元:unit Soap.InvokeRegistry; 比如: TByteSOAPArray array of Byte;TIntegerSOAPArray array of Integer;TCardinalSOAPArray array of Cardinal;TWordSOAPArray array of Word;TSmallIntSOAPArray array of Sma…

Qt creator设置程序图标

1.windows 在.pro加入 RC_ICONS XXX.ico Qt 只能使用.ico图片设置为程序图标,若是其他图片,需转换为.ico. png在线转ico:PNG to ICO | Convert PNG to ICO online for free 2.其他平台 Qt 设置应用程序图标并没有跨平台: https://doc…

JSON数据转化为Excel及数据处理分析

在现代数据处理中,JSON(JavaScript Object Notation)因其轻量级和易于人阅读的特点而被广泛使用。然而,有时我们需要将这些JSON数据转化为Excel格式以便于进一步的分析和处理。本文将介绍如何将JSON数据转化为Excel文件&#xff0…

Scala入门基础(20)数据集复习拓展

一.Stack栈二.Queue 队列 一.Stack栈 Stack:栈,特殊的结构。它对元素的操作是在头部:栈顶 先进后出的队列。pop表示取出,push表示在栈中添加元素 二.Queue 队列 Queue 队列;先进先出.enqueue入队,dequeue出队。

Pandas 数据读取与导出

Pandas 是一个强大的 Python 库,用于数据处理和分析。它提供了许多函数来读取和导入数据,支持多种文件格式,如 CSV、Excel、SQL 数据库、JSON 等。以下是一些常用的数据读取和导出方法: 常用方法 格式文件格式读取函数写入&…

Ubuntu20.04运行DM-VIO

目录 环境配置非ROS环境运行编译运行结果图 ROS环境参考 环境配置 Ubuntu20.04 将项目中Cmakelists.txt中C 和 opencv版本修改下 C 使用 14 opencv使用4 非ROS环境运行 编译 按照官网即可 cd dm-vio mkdir build cd build cmake .. make -j运行 DM-VIO给的命令是 bin/d…

TDengine 签约深圳综合粒子,赋能粒子研究新突破

在高能物理和粒子研究领域,实验装置的不断升级伴随着海量数据的产生与处理。尤其是随着大湾区综合性国家科学中心的建设步伐加快,深圳综合粒子设施研究院(以下简称“研究院”)作为承载“双区驱动”战略的重要科研机构,…

IDEA连接Apifox客户端

IDEA连接Apifox客户端 一、下载Apifox安装包二、IDEA配置三、配置Apifox和IDEA项目同步 一、下载Apifox安装包 Apifox官网,根据自己的操作系统下载对应的Apifox安装包,我是windows系统所以下载的是windows版。 下载 默认仅为我安装,点击下一…

(C语言) 8大翻译阶段

(C语言) 8大翻译阶段 文章目录 (C语言) 8大翻译阶段⭐前言🗃️8大阶段🗂️1. 字符映射🗂️2. 行分割🗂️3. 标记化🗂️4. 预处理🗂️5. 字符集映射🗂️6. 字符串拼接🗂️7. 翻译&…

php反序列化1_常见php序列化的CTF考题

声明: 以下多内容来自暗月师傅我是通过他的教程来学习记录的,如有侵权联系删除。 一道反序列化的CTF题分享_ctf反序列化题目_Mr.95的博客-CSDN博客 一些其他大佬的wp参考:php_反序列化_1 | dayu’s blog (killdayu.com) 序列化一个对象将…

Spring Boot拦截器(Interceptor)详解

拦截器Interceptor 拦截器我们主要分为三个方面进行讲解: 介绍下什么是拦截器,并通过快速入门程序上手拦截器拦截器的使用细节通过拦截器Interceptor完成登录校验功能 1. 快速入门 什么是拦截器? 是一种动态拦截方法调用的机制&#xff…