185.二叉树:二叉搜索树的最近公共祖先(力扣)

代码解决

/*** 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) {// 如果当前节点为空,返回空if(root == NULL) return NULL;// 如果当前节点的值大于 p 和 q 的值,说明 p 和 q 都在左子树if(root->val > p->val && root->val > q->val){// 递归查找左子树中的 LCATreeNode* left1 = lowestCommonAncestor(root->left, p, q);// 如果在左子树中找到了 LCA,直接返回if(left1 != NULL) return left1;}// 如果当前节点的值小于 p 和 q 的值,说明 p 和 q 都在右子树if(root->val < p->val && root->val < q->val){// 递归查找右子树中的 LCATreeNode* right1 = lowestCommonAncestor(root->right, p, q);return right1; // 返回右子树中的 LCA}// 如果当前节点的值介于 p 和 q 之间,或者等于 p 或 q 的值,当前节点即为 LCAreturn root;}
};

代码使用了递归的方法。主要思路是首先判断当前节点是否为空,如果为空,返回空。然后,根据 p 和 q 的值与当前节点的值的关系,递归地在左子树或右子树中寻找这两个节点。如果当前节点的值大于 p 和 q 的值,则 p 和 q 都在左子树;如果当前节点的值小于 p 和 q 的值,则 p 和 q 都在右子树;如果当前节点的值介于 p 和 q 之间,或者等于 p 或 q 的值,则当前节点即为最低公共祖先。

这里简要解释一下代码的工作流程:

  1. 首先判断当前节点是否为空,如果为空,返回空。
  2. 根据 p 和 q 的值与当前节点的值的关系,决定在左子树或右子树中寻找这两个节点。
  3. 递归地在选定的子树中寻找节点 p 和 q。
  4. 根据递归的结果,判断当前节点是否为最低公共祖先,并返回结果。

这个算法的时间复杂度是 O(h),其中 h 是树的高度。在最坏的情况下,可能需要遍历整个树来找到最低公共祖先。空间复杂度也是 O(h),因为需要存储递归调用的栈。

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

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

相关文章

flask基础4-flask数据库操作

目录 一.SQLALchemy 1.安装&#xff1a; 2.连接 二&#xff1a;创建OBM映射 SQLALchemy常用数据类型 三&#xff1a;数据的CRUD操作 1.构建session对象 2.添加对象 3.查找对象 4.修改对象 5.删除对象 四&#xff1a;ORM的关联关系 1.表的外键关联一对多 3.ORM中的一…

Honor of Kings 2024.06.13 (2)

【第一局】准确的说&#xff0c;其实对面优势更加明显&#xff0c;可惜黄忠和墨子喜欢杀人&#xff0c;而我又是不喜欢杀人的&#xff0c;打了好几次失误 【第二局】阵容本来很有优势&#xff0c;这个二呆射手跟第一局黄忠一样爱杀人&#xff0c;应该说三路的输出都爱杀人&…

编程器可以做什么游戏:探索游戏开发的无限可能

编程器可以做什么游戏&#xff1a;探索游戏开发的无限可能 编程器&#xff0c;作为游戏开发的核心工具&#xff0c;赋予了开发者创造独特游戏体验的能力。那么&#xff0c;编程器究竟可以做什么游戏呢&#xff1f;本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;…

小主机折腾记26

双独立显卡调用问题 前两天将tesla p4从x99大板上拆了下来&#xff0c;将880G5twr上的rx480 4g安装到了x99大板上&#xff0c;预计是dg1输出&#xff0c;rx480做3d运算。安装完驱动后&#xff0c;还想着按照之前tesla p4的设置方法去设置rx480&#xff0c;结果果然&#xff0c…

Serverless 使用OOS将http文件转存到对象存储

目录 背景介绍 系统运维管理OOS 文件转存场景 前提条件 实践步骤 附录 示例模板 背景介绍 系统运维管理OOS 系统运维管理OOS&#xff08;CloudOps Orchestration Service&#xff09;提供了一个高度灵活和强大的解决方案&#xff0c;通过精巧地编排阿里云提供的OpenAPI…

AcWing 477:神经网络 ← 拓扑排序+链式前向星

【题目来源】https://www.acwing.com/problem/content/479/【题目描述】 人工神经网络&#xff08;Artificial Neural Network&#xff09;是一种新兴的具有自我学习能力的计算系统&#xff0c;在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。 对神经网络的研究…

Golang的json解析--Gjson库的使用举例

目录 简介 安装 原生的json解析 Gjson使用举例 基本使用 键路径 使用示例 其他资源 简介 在 Golang 中&#xff0c;解析 JSON 数据是一项非常常见的任务。Go提供了标准的JSON包&#xff0c;可以轻松地将JSON数据序列化和反序列化。但是&#xff0c;在使用标准JSON包…

Navigation的基本使用及其原理

Navigation的基本使用 1. 添加依赖 首先&#xff0c;在项目的build.gradle中添加Navigation组件库的依赖。 dependencies { implementation androidx.navigation:navigation-fragment:X.X.X implementation androidx.navigation:navigation-ui:X.X.X // 请替换X.X.X为当前最…

Go语言的GoFly快速开发框架已经支持Postgresql和Mysql两种数据库

两个数据库的选择 我们框架为了方便大家开发能更加业务场景选择不同侧重性能要求的数据&#xff0c;我们把MySQL和PostgreSQL两个在开源界很有名气数据库都支持进去。这样一个企业可以在开发习惯不改变情况下可以有两个选择。 这样的话我们在选择数据库系统时&#xff0c;需要…

Rust : windows下protobuf和压缩传输方案

此前dbpystream库是用python开发 web api。今天在rust中试用一下protobuf。 本文关键词&#xff1a;编译器、protobuf、proto文件、序列化、zstd压缩&#xff0c;build。 一、 protobuf编译器下载 具体见相关文章。没有编译器&#xff0c;protobuf无法运行。 windows参见&am…

【皇帝的新衣】虚拟小组长的团队管理

团队有时候会需要设立虚拟小组长来分组帮忙管理&#xff0c;那么&#xff0c;虚拟小组的负责人应当怎么做好管理动作&#xff1f; 目前很多大厂追求团队管理上的扁平化&#xff0c;但真正有实职的领导们一般管理30人数&#xff0c;此时需要一个虚拟小组长来分组帮忙管理。 一、…

字节出品SDXL-Lightning:文生图开放模型新突破

生成模型的研究中&#xff0c;文本到图像的生成一直是一个充满挑战的任务。传统的扩散模型虽然在生成质量上取得了显著的成果&#xff0c;但其生成过程往往需要大量的迭代步骤&#xff0c;这不仅导致计算成本高昂&#xff0c;而且生成速度缓慢&#xff0c;难以满足实时或近实时…

时间类:SimpleDateFormatk

一.作用 1.格式化&#xff1a;把时间变成我们喜欢的格式。 2.解析:把字符串表示的时间变成Date对象。 二.默认格式 SimpleDateFormat sdf1 new SimpleDateFormat();Date d1 new Date(0L); // format表示格式化的意思String str1 sdf1.format(d1);System.out.printl…

【MATLAB源码-第225期】基于matlab的计算器GUI设计仿真,能够实现基础运算,三角函数以及幂运算。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 界面布局 计算器界面的主要元素分为几大部分&#xff1a;显示屏、功能按钮、数字按钮和操作符按钮。 显示屏 显示屏&#xff08;Edit Text&#xff09;&#xff1a;位于界面顶部中央&#xff0c;用于显示用户输入的表达式和…

没有特斯拉的开源专利,就没有中国电动车产业今天的成就?

原文链接&#xff1a;没有特斯拉的开源专利&#xff0c;就没有中国电动车产业今天的成就&#xff1f; 特斯拉的开源专利&#xff0c;对中国电动车产业的影响有多大&#xff1f; 2014年6月12日&#xff08;June 12, 2014&#xff09;&#xff0c;特斯拉&#xff08;TESLA&…

nodejs 某音douyin网页端搜索接口及x_bogus、a_bogus(包含完整源码)(2024-06-13)

前言 x_bogus或a_bogus算法大概是对数据、ua、时间戳、浏览器的几个指纹进行计算&#xff0c;拿到一个110位大数组&#xff0c;然后转字符&#xff0c;在头部再添加十二位随机字符&#xff0c;再进行魔改的base64加密。 问&#xff1a;抖音的x_bogus、a_bogus值有什么用&#x…

react路由的使用

安装 npm install react-router-dom main.tsx中配置 import React from react import { RouterProvider } from react-router-dom import ReactDOM from react-dom/client import App from ./App.tsx import normalize.css import ./index.cssimport router from ./router/i…

网工内推 | 外企、上市公司运维工程师,有软考中高项证书优先

01 优尼派特&#xff08;苏州&#xff09;物流有限公司 &#x1f537;招聘岗位&#xff1a;软件运维测试工程师 &#x1f537;任职要求&#xff1a; 1、负责公司自主研发的软件售后服务工作, 包括软件的安装, 调试, 升级,培训, 参数配置, 需求与Bug的处理; 2、负责数据库升级及…

远程主机强迫关闭了一个现有的连接redis

引言 在使用 Redis 进行开发和运维过程中&#xff0c;我们可能会遇到 Redis 连接被远程主机强制关闭的情况。本文将介绍造成这种情况的原因&#xff0c;并给出一些处理方法和建议。 远程主机强制关闭连接的原因 远程主机强制关闭连接通常是由于网络不稳定、连接超时、Redis 配…

数据质量测试:测试数据有效性和准确性的方法

以下为作者观点&#xff0c;来看看你认同吗&#xff1f; 如果西西弗斯&#xff08;编者注&#xff1a;希腊神话中的人物&#xff09;是一个数据分析师或数据科学家&#xff0c;他在山上滚动的巨石将是他的数据质量保障。即使所有获取、处理和建模的工程流程都无懈可击&#xf…