当前位置: 首页 > news >正文

236.二叉树的最近公共祖先

       

        在树结构中,祖先指的是一个节点的父节点或更高层级的父节点。公共祖先是指同时为节点p和q的祖先的节点。最近公共祖先(LCA)则是指在所有公共祖先中,距离p和q最近的那个节点。寻找LCA的方法可以按以下情况进行分析:

  1. 当前节点为空节点
  2. 当前节点就是p节点
  3. 当前节点就是q节点
  4. 当前节点既不是p也不是q,且p和q位于其子树中:
    • p和q分别位于左右子树
    • p和q都在左子树
    • p和q都在右子树
    • p和q都不在子树中

具体解决方案如下:

情况1:空节点不可能是p和q的LCA。

情况2和3:如果当前节点是p或q,直接返回当前节点。因为若当前节点是p,而q是其子节点,则p就是LCA(节点可以是自身的LCA)。若q不在p的子树中,则无需继续在p的子树中搜索。

情况4.1:当前节点就是LCA。因为如果LCA在左子树,则不会是q的祖先;在右子树则不会是p的祖先;在上层节点则不满足"最近"的条件。

情况4.2:LCA必定在左子树中,因此递归搜索左子树。

情况4.3和4.4可以合并处理:若p和q都在右子树,则递归搜索右子树;若都不在子树中,则右子树也为空。        

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

        时间复杂度:O(n),n为节点个数

        空间复杂度:O(n)

类似的可以求解一下235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode)

http://www.xdnf.cn/news/630181.html

相关文章:

  • Day35打卡 @浙大疏锦行
  • 深度解析NL2SQL:从语义理解到工程实践的全链路探索
  • DC-DC电路的自举电容电路原理
  • Linux(7)——进程(概念篇)
  • 介绍一下什么是反射(面试题详细讲解)
  • VBA 读取指定范围内的单元格数据,生成csv文件
  • 英语学习5.24
  • Java中是值传递还是引用传递 ?
  • vue2中el-table 实现前端分页
  • 5.Java 面向对象编程入门:类与对象的创建和使用​
  • uint8_t是什么数据类型?
  • WSL 基础命令
  • 整平机实战手册:从参数调试到工艺优化的全流程指南
  • “天启” AI 技术演进任重道远
  • 为什么我输入对了密码,还是不能用 su 切换到 root?
  • 推荐系统里真的存在“反馈循环”吗?
  • WordPress多语言插件安装与使用教程
  • 2025年电工杯数学建模B题【垃圾运输】原创论文分享
  • 医学影像科研概述与研究伦理
  • [软件测试_4] 沟通技巧 | 测试用例 | 设计方法
  • 大模型推理 memory bandwidth bound (5) - Medusa
  • 一本通1307:【例1.3】高精度乘法 1308:【例1.5】高精除
  • 矩阵乘法--Python
  • Linux—进程池实现
  • 技术文档炼金术:从混乱到优雅的知识封装
  • 嵌入式工程师常用软件
  • React Native 拼音及拼音首字母搜索组件开发
  • 初识Vue【1】
  • 数据库调优与数据表的范式设计
  • C语言 动态内存管理(4)