剑指offer——JZ68 二叉搜索树的最近公共祖先 解题思路与具体代码【C++】
一、题目描述与要求
二叉搜索树的最近公共祖先_牛客题霸_牛客网 (nowcoder.com)
题目描述
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
1.对于该题的最近的公共祖先定义:对于有根树T的两个节点p、q,最近公共祖先LCA(T,p,q)表示一个节点x,满足x是p和q的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先.
2.二叉搜索树是若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值
3.所有节点的值都是唯一的。
4.p、q 为不同节点且均存在于给定的二叉搜索树中。
数据范围:
3<=节点总数<=10000
0<=节点值<=10000
如果给定以下搜索二叉树: {7,1,12,0,4,11,14,#,#,3,5},如下图:

示例
示例1:
输入:{7,1,12,0,4,11,14,#,#,3,5},1,12
返回值:7
说明:节点1 和 节点12的最近公共祖先是7
示例2:
输入:{7,1,12,0,4,11,14,#,#,3,5},12,11
返回值:12
说明:因为一个节点也可以是它自己的祖先.所以输出12
二、解题思路
根据题目要求,需要我们在给定的二叉树中,找到所给出的两个结点的最近公共祖先。
思路很简单,就是我们从根节点开始分别去找到所给出的两个结点,并且记录根结点分别到两个结点的路径,然后比较这两条路径,路径中最后一个相同的结点就是两个结点最近的公共结点。其中路径的查找则可以利用二叉搜索树的性质,左子树都比根结点小,右子树都比根结点大,将所给定结点的值与根结点比较从而找到所给结点即可,路径则记录在vector中。
题目说了节点数量>=3,因此我们不需要判断树是否为空。
首先求出根结点到对应两个结点的路径;
利用for循环遍历两个路径,找到最后一个相同的结点,最后返回即可。

三、具体代码
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param root TreeNode类 * @param p int整型 * @param q int整型 * @return int整型*/vector<int> getPath(TreeNode* root,int x){vector<int> path;TreeNode* p=root;while(p->val!=x){path.push_back(p->val);if(x<p->val) p=p->left;else p=p->right;}path.push_back(p->val);return path;}int lowestCommonAncestor(TreeNode* root, int p, int q) {//找到根结点到目标结点的路线vector<int> path_p=getPath(root,p);vector<int> path_q=getPath(root,q);int res=0;//最后结果for(int i=0;i<path_p.size()&&i<path_q.size();i++){//最后一个相同的结点就是最近的公共祖先if(path_p[i]==path_q[i]) res=path_p[i];else break;}return res;}
};
相关文章:
剑指offer——JZ68 二叉搜索树的最近公共祖先 解题思路与具体代码【C++】
一、题目描述与要求 二叉搜索树的最近公共祖先_牛客题霸_牛客网 (nowcoder.com) 题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 1.对于该题的最近的公共祖先定义:对于有根树T的两个节点p、q,最近公共祖先LCA(T,p,q)表示一个节点x&#…...
[Spring] @Bean 修饰方法时如何注入参数
目录 一、Bean 的简单使用 1、正常情况 2、问题提出 二、解决方案 1、Qualifier 2、直接写方法名 三、特殊情况 1、DataSource 一、Bean 的简单使用 在开发中,基于 XML 文件配置 Bean 对象的做法非常繁琐且不好维护,因此绝大部分情况下都是使用…...
docker拉取镜像错误 missing signature key
您正在尝试使用 yum 在 CentOS 或 RHEL 系统上安装 docker-ce,但您遇到了一些问题。根据您提供的输出,这里有几个需要注意的点: 系统未注册: "This system is not registered with an entitlement server" 指示您的系统未注册。对于…...
基于可解释性特征矩阵与稀疏采样全局特征组合的人体行为识别
论文还未发表,不细说,欢迎讨论。 Title: A New Solution to Skeleton-Based Human Action Recognition via the combination usage of explainable feature extraction and sparse sampling global features. Abstract: With the development of deep …...
OpenCV4(C++)—— 仿射变换、透射变换和极坐标变换
文章目录 一、仿射变换1. getRotationMatrix2D()2. warpAffine() 二、透射变换三、极坐标变换 一、仿射变换 在OpenCV中没有专门用于图像旋转的函数,而是通过图像的仿射变换实现图像的旋转。实现图像的旋转首先需要确定旋转角度和旋转中心,之后确定旋转…...
http.header.Set()与Add()区别;
在Go语言中进行HTTP请求时,http.Header对象表示HTTP请求或响应的头部信息。http.Header是一个map[string][]string类型的结构,用于存储键值对,其中键表示HTTP头字段的名称,值是一个字符串切片,可以存储多个相同名称的头…...
vue-7-vuex
一、Vuex 概述 目标:明确Vuex是什么,应用场景以及优势 1.是什么 Vuex 是一个 Vue 的 状态管理工具,状态就是数据。 大白话:Vuex 是一个插件,可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。例如:购…...
SSO单点登录和OAuth2.0区别
一、概述 SSO是Single Sign On的缩写,OAuth是Open Authority的缩写,这两者都是使用令牌的方式来代替用户密码访问应用。流程上来说他们非常相似,但概念上又十分不同。SSO大家应该比较熟悉,它将登录认证和业务系统分离,…...
【轻松玩转MacOS】基本操作篇
引言 本文是系列的开篇,我将为大家介绍MacOS的基本操作。对于初次接触MacOS的用户来说,掌握这些基本操作是必不可少的。无论是启动和关机,还是使用键盘和鼠标,或者是快捷键的使用,这些基本操作都是你开始使用MacOS的第…...
华为ICT——第三章图像处理基本任务
目录 1:数字图像处理的层次:(处理-分析-理解)顺序不能错: 2:图像处理(图像处理过程): 3:图像分析(特征提取): 4&#x…...
(C++)引用的用法总结
引用(reference)是C极为重要的一部分,本文对其用法进行简单总结。 1. 引用的基本用法 引用的关键字为&,表示取地址的意思,引用变量定义如下: int m 1; int &n m; //定义 cout<<"n:…...
Charles:移动端抓包 / windows客户端 iOS手机 / 手机访问PC本地项目做调试
一、背景描述 1.1、本文需求:移动端进行抓包调试 1.2、理解Charles可以做什么 Charles是一款跨平台的网络代理软件,可以用于捕获和分析网络流量,对HTTP、HTTPS、HTTP/2等协议进行调试和监控。使用Charles可以帮助开发人员进行Web开发、调试…...
【AI】深度学习——人工智能、深度学习与神经网络
文章目录 0.1 如何开发一个AI系统0.2 表示学习(特征处理)0.2.1 传统特征学习特征选择过滤式包裹式 L 1 L_1 L1 正则化 特征抽取监督的特征学习无监督的特征学习 特征工程作用 0.2.2 语义鸿沟0.2.3 表示方式关联 0.2.4 表示学习对比 0.3 深度学习0.3.1 表示学习与深度学习0.3.…...
RK3288:BT656 RN6752调试
这篇文章主要想介绍一下再RK3288平台上面调试BT656 video in的注意事项。以RN6752转接芯片,android10平台为例进行介绍。 目录 1. RK3288 VIDEO INPUT 并口 2. 驱动调试 2.1 RN6752 驱动实现 ①rn6752_g_mbus_config总线相关配置 ②rn6752_querystd配置制式 …...
LLMs 蒸馏, 量化精度, 剪枝 模型优化以用于部署 Model optimizations for deployment
现在,您已经了解了如何调整和对齐大型语言模型以适应您的任务,让我们讨论一下将模型集成到应用程序中需要考虑的事项。 在这个阶段有许多重要的问题需要问。第一组问题与您的LLM在部署中的功能有关。您需要模型生成完成的速度有多快?您有多…...
Milvus踩坑笔记
本文用于记录在学习 Milvus文档时所遇到的一些Bug或报错及解决方法 参考文章: 官方demo:在Dynamic Schema的集合中插入数据 报错1:auto id enabled, id shouldnt in entities[0] 问题描述 此报错出现在Milvus官方在介绍 Dynamic Schema …...
什么是轴电流?轴电流对轴承有什么危害?
根据同步发电机结构及工作原理,由于定子铁芯组合缝、定子硅钢片接缝,定子与转子空气间隙不均匀,轴中心与磁场中心不一致等,机组的主轴不可避免地要在一个不完全对称的磁场中旋转。这样,在轴两端就会产生一个交流电压。…...
react create-react-app v5配置 px2rem (不暴露 eject方式)
环境信息: create-react-app v5 “react”: “^18.2.0” “postcss-plugin-px2rem”: “^0.8.1” 配置步骤: 不暴露 eject 配置自己的webpack: 1.下载react-app-rewired 和 customize-cra-5 npm install react-app-rewired customize-cra…...
.net中用标志位解决socket粘包问题
以下为wpf中, 用标志位"q" 解决粘包问题 using MyFrameWorkWpf.Entities; using System.Collections.ObjectModel; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.…...
【Ubuntu】Systemctl 管理 MinIO 服务器的启动和停止
要使用 systemctl 来管理 MinIO 服务器的启动和停止,您需要创建一个 systemd 服务单元文件,以便 systemd 能够启动和停止 MinIO 服务器。下面是一般的步骤: 创建 systemd 服务单元文件: 打开终端并使用文本编辑器创建一个新的 sys…...
STM32H7网络延迟问题分析与解决方案
1. 问题现象与背景分析最近在将STM32H7系列设备的DFP(Device Family Pack)从v2.2.0升级到v2.3.0版本后,不少开发者反馈网络数据传输出现了明显的延迟问题。通过简单的ping测试可以直观观察到,使用v2.3.0版本的往返时间(RTT)相比v2…...
AltSnap:重新定义Windows窗口管理效率的革命性工具
AltSnap:重新定义Windows窗口管理效率的革命性工具 【免费下载链接】AltSnap Maintained continuation of Stefan Sundins AltDrag 项目地址: https://gitcode.com/gh_mirrors/al/AltSnap 你是否曾经在Windows系统中为繁琐的窗口操作而烦恼?当需要…...
VMware Unlocker终极指南:在Windows/Linux上运行macOS虚拟机
VMware Unlocker终极指南:在Windows/Linux上运行macOS虚拟机 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 想要在Windows或Linux电脑上体验苹果macOS系统吗?无论你是开发者需要…...
5分钟掌握UABEA:解锁Unity游戏资源编辑的终极指南
5分钟掌握UABEA:解锁Unity游戏资源编辑的终极指南 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA 你是否曾想修改游戏角色皮肤却无从下手?面对Unity打包的.asset和.bundle文件感…...
基于BLE MIDI的智能木琴:用Arduino与电磁铁桥接物理乐器与数字音频工作站
1. 项目概述:当传统木琴遇见现代数字音乐如果你和我一样,既着迷于传统打击乐器那清脆、富有共鸣的物理音色,又离不开现代数字音频工作站(DAW)那强大的创作和编辑能力,那么“如何将两者无缝桥接”可能一直是…...
使用Taotoken后我们如何观测与优化大模型API调用成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken后我们如何观测与优化大模型API调用成本 1. 从黑盒到透明:成本观测的第一步 在接入大模型API的初期&…...
别再死记硬背了!用Python+Control库,5分钟可视化开环零极点对根轨迹的实际影响
用Python可视化开环零极点对根轨迹的动态影响 在传统控制理论教学中,根轨迹分析往往停留在纸面推导和静态图表上,让学生陷入复杂的相角条件和幅值计算中。这种抽象的学习方式容易造成"学完就忘"的困境——你或许能背诵"增加开环零点会使根…...
CefFlashBrowser完全指南:2025年畅玩Flash游戏与存档管理终极方案
CefFlashBrowser完全指南:2025年畅玩Flash游戏与存档管理终极方案 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 在Adobe Flash正式退出历史舞台后,无数经典网页游…...
TVA模型适配FPC材料疲劳差异
重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...
回声干扰导致TTS通过率暴跌41%?ElevenLabs生产环境回声抑制黄金配置,仅限内部团队使用的7项阈值标准
更多请点击: https://intelliparadigm.com 第一章:回声干扰对TTS语音质量的致命影响 回声干扰(Echo Interference)是实时TTS(Text-to-Speech)系统在语音合成与播放耦合场景中极易被忽视却极具破坏性的声学…...
