当前位置: 首页 > 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)

相关文章:

  • python web开发-Flask模板引擎Jinja2完全指南
  • 进一步学习线程相关知识
  • vue3中使用computed
  • Python 爬虫之requests 模块的应用
  • Vue组件通信的 `$attrs`与`$listeners`的优先级
  • 高效大型语言模型推理优化综述
  • Reason-ModernColBERT论文速览:Sentence- bert-基于孪生bert网络的句子嵌入
  • 基于SpringBoot+Vue的家政服务系统源码适配H5小程序APP
  • 人脸识别流程与算法对比报告
  • ES 面试题系列「三」
  • (已开源-CVPR2024) RadarDistill---NuScenes数据集Radar检测第一名
  • Java—— IO流的应用
  • OpenLayers 加载鼠标位置控件
  • 电子人的分水岭-FPGA模电和数电
  • CMSIS-NN:2.神经网络到CMSIS-NN的转换
  • TypeScript 完全指南(三):工程化实战,搭建高效 TS 项目架构
  • keil直接生成bin文件
  • JDK21深度解密 Day 4:虚拟线程底层实现原理
  • leetcode2466,爬楼梯变体,取模注意
  • 国际前沿知识系列三:解决泛化能力不足问题
  • 个体户营业执照可以网站备案/百度快速收录seo工具软件
  • 哪做网站好/石家庄新闻网
  • 深圳网站建设 易通鼎/免费关键词搜索引擎工具
  • 带论坛的网站模板下载/百度推广怎么收费的
  • 医院网站建设好处/如何在百度推广
  • 免费的网站域名和空间/域名查询ip爱站网