新闻详情

新闻详情

首页 / 资讯中心 / 详情

【二叉树-11】236.二叉树的最近公共祖先

发布时间:2026/9/26 16:11:11来源:尧图网络
【二叉树-11】236.二叉树的最近公共祖先
题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为“对于有根树 T 的两个节点 p、q最近公共祖先表示为一个节点 x满足 x 是 p、q 的祖先且 x 的深度尽可能大一个节点也可以是它自己的祖先。”示例 1输入root [3,5,1,6,2,0,8,null,null,7,4], p 5, q 1输出3解释节点 5 和节点 1 的最近公共祖先是节点 3 。示例 2输入root [3,5,1,6,2,0,8,null,null,7,4], p 5, q 4输出5解释节点 5 和节点 4 的最近公共祖先是节点 5 。因为根据定义最近公共祖先节点可以为节点本身。示例 3输入root [1,2], p 1, q 2输出1解题思路方法递归后序遍历核心思路对于任意节点root判断 p 和 q 的位置p 和 q 都在左子树→ LCA 在左子树p 和 q 都在右子树→ LCA 在右子树p 和 q 分别在左右子树→ LCA 就是当前节点当前节点就是 p 或 q→ LCA 就是当前节点递归函数定义TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q)返回值含义如果root是 p 或 q返回root如果root的左右子树分别包含 p 和 q返回root如果root的左右子树只有一边包含 p 或 q返回那一边的结果如果都不包含返回nullptr具体过程示例3 / \ 5 1 / \ / \ 6 2 0 8 / \ 7 4 p 5, q 4 递归过程: 1. 节点3: 左子树返回5, 右子树返回null → 返回5 2. 节点5: 左子树返回null, 右子树返回4 → 返回5因为5是p 3. 节点2: 左子树返回7, 右子树返回4 → 返回2左右都非空 最终: 5 ✅代码实现class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { // 终止条件 if (root nullptr) return nullptr; if (root p || root q) return root; // 递归左右子树 TreeNode* left lowestCommonAncestor(root-left, p, q); TreeNode* right lowestCommonAncestor(root-right, p, q); // 左右都非空说明 p 和 q 分别在两侧当前节点就是 LCA if (left ! nullptr right ! nullptr) return root; // 只有一边非空返回那一边 return (left ! nullptr) ? left : right; } };复杂度分析维度复杂度说明时间复杂度O(n)最坏情况遍历所有节点空间复杂度O(h)递归栈深度h 是树的高度空间复杂度说明最坏情况链状树O(n)平均情况平衡树O(log n)关键细节1. 为什么root p || root q就返回root因为如果当前节点就是 p 或 q它可能是 LCA如果另一个在它的子树中或者它不是 LCA但需要向上传递我找到了 p 或 q这个信息2. 为什么left ! nullptr right ! nullptr时返回root因为左子树找到了 p 或 q右子树找到了另一个说明 p 和 q分别在两侧当前节点就是它们的最近公共祖先3. 为什么最后返回left ! nullptr ? left : right如果只有左子树非空说明 p 和 q都在左子树返回左子树的结果如果只有右子树非空说明 p 和 q都在右子树返回右子树的结果如果都为空返回nullptr总结要点说明核心思想后序遍历判断 p 和 q 的位置关键判断左右都非空 → 当前节点是 LCA时间复杂度O(n)空间复杂度O(h)
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Zed编辑器实测:极速启动、GPUI架构与中文汉化完整指南 2026/9/26 16:58:23

Zed编辑器实测:极速启动、GPUI架构与中文汉化完整指南

如果你最近在关注开发者工具圈,大概率见过 Zed 这个名字。作为从 Atom 团队走出来的新一代编辑器,Zed 的定位非常明确:极速、协作、原生体验。我在 Protocol Launcher 系列里写的第一篇,就打算好好聊聊 Zed 这套方案怎么落地——包…

阅读更多 →
Java + POI 高性能 Excel 导出实战:List、MyBatis Cursor 流式与 VO 适配配 TaoToken 2026/9/26 16:58:16

Java + POI 高性能 Excel 导出实战:List、MyBatis Cursor 流式与 VO 适配配 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
DeepSeek V3.2 实测基准全解析:从 Codeforces 到 LiveCodeBench,TaoToken 统一 Key 接入 Agent 工作流 2026/9/26 16:58:16

DeepSeek V3.2 实测基准全解析:从 Codeforces 到 LiveCodeBench,TaoToken 统一 Key 接入 Agent 工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
ChatGPT Plus / Pro + Codex 实战:用 TaoToken 统一 Key 打通 AI 代码审查与重构工作流(2026-08-28) 2026/9/26 16:58:10

ChatGPT Plus / Pro + Codex 实战:用 TaoToken 统一 Key 打通 AI 代码审查与重构工作流(2026-08-28)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
PostgreSQL12在Windows下安装TimescaleDB2.3.0 2026/9/26 16:58:04

PostgreSQL12在Windows下安装TimescaleDB2.3.0

简介:这是适用于 Windows 64 位系统的 TimescaleDB v2.3.0 与 PostgreSQL 12 整合安装包,面向需要处理大规模时间序列数据的数据库工程师和架构师。应用场景包括物联网设备采集、金融交易流水、日志监控和运营分析等高频时序数据写入与查询。在 PostgreS…

阅读更多 →
.NET + SK + MCP:构建AI Agent工具调用能力层实战 2026/9/26 16:58:04

.NET + SK + MCP:构建AI Agent工具调用能力层实战

这两年大模型工具链里最热的一个词,恐怕就是 MCP(Model Context Protocol,模型上下文协议)了。如果你在 .NET 生态里做 AI 应用,又对 Semantic Kernel(SK)不陌生,那应该已经感受到了…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉