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

Day119 | 灵神 | 二叉树 | 二叉树的最近共公共祖先

Day119 | 灵神 | 二叉树 | 二叉树的最近共公共祖先

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

236. 二叉树的最近公共祖先 - 力扣(LeetCode)

思路:

二叉树的最近公共祖先【基础算法精讲 12】_哔哩哔哩_bilibili

首先我们采用后序遍历

递归函数返回值是问是「最近公共祖先的候选项」。对于最外层的递归调用者来说,返回值是最近公共祖先的意思。但是,在递归过程中,返回值可能是最近公共祖先,也可能是空节点(表示子树内没找到任何有用信息)、节点 p 或者节点 q(可能成为最近公共祖先,或者用来辅助判断上面的某个节点是否为最近公共祖先)。

image-20250517211000204

1.当前节点的是空节点

那就返回空

2.当前结点是p或者q,直接返回当前结点就行

比如5是p,4是q,那么我们遍历到5就直接返回5就行,因为5是5和4的最近公共祖先

image-20250517211126456

3.如果左右子树都有的话,也就是pq分别在这当前结点的左右子树,那么最近公共祖先就是当前结点

image-20250517211231874

4.如果只在左子树中找到了q或者p,那说明最近公共祖先肯定在左子树,返回遍历左子树的结果就行

右子树是同理的

image-20250517211324399

5.当前结点的左右子树都没找到p或者q,那说明在其他的子树

返回nullptr

完整代码:

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {//1.当前结点为空或者q或者p,返回当前结点if(root==nullptr || root==p || root==q)return root;TreeNode *l=lowestCommonAncestor(root->left,p,q);TreeNode *r=lowestCommonAncestor(root->right,p,q);//2.左右子树中分别找到了p或者qif(l!=nullptr&&r!=nullptr)return root;//3.p和q全在右子树中else if(l==nullptr&&r!=nullptr)return r;//4.p和q全在左子树中else if(l!=nullptr&&r==nullptr)return l;//5.q和p不在当前子树elsereturn nullptr;}
};

相关文章:

  • SpringSecurity授权、认证
  • python如何做数据预处理
  • matlab求矩阵的逆、行列式、秩、转置
  • 编程基础:什么是变量
  • 【Linux笔记】nfs网络文件系统与autofs(nfsdata、autofs、autofs.conf、auto.master)
  • Linux面试题集合(6)
  • STM32外设DA实战-DAC + DMA 输出正弦波
  • 打卡Day28
  • 1.2 C++第一个程序
  • JavaScript splice() 方法
  • C语言斐波那契数列
  • 计算机视觉与深度学习 | Python实现EMD-CNN-LSTM时间序列预测(完整源码、数据、公式)
  • 【前端基础】11、CSS的属性特性(继承、层叠、元素类型、隐藏元素的四种方式)
  • 松下SMT贴片机选型与高效应用指南
  • webman用nginx代理静态json文件的异步跨域
  • 2025年数字孪生技术最新应用案例:跨领域实践与技术趋势
  • c++成员函数返回类对象引用和直接返回类对象的区别
  • java中的方法详解
  • Seata源码—5.全局事务的创建与返回处理二
  • Linux中的进程
  • 15年全免费,内蒙古准格尔旗实现幼儿园到高中0学费
  • 用贝多芬八首钢琴三重奏纪念风雨并肩20年
  • 昔日千亿房企祥生集团约2.03亿元债权被拍卖,起拍价8000万元
  • 涉案资金超2亿元 “健康投资”骗局,专挑老年人下手
  • 体坛联播|巴萨提前2轮西甲夺冠,郑钦文不敌高芙止步4强
  • 李峰已任上海青浦区委常委