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

【数据结构】二叉树篇|超清晰图解和详解:二叉树的最近公共祖先

在这里插入图片描述

  • 博主简介:努力学习的22级计算机科学与技术本科生一枚🌸
  • 博主主页: @是瑶瑶子啦
  • 每日一言🌼: 你不能要求一片海洋,没有风暴,那不是海洋,是泥塘——毕淑敏

目录

  • 一、题目
  • 二、题解
  • 三、代码

一、题目

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

在这里插入图片描述

二、题解

在这里插入图片描述注意:祖先是包括自身的!

  • 🍊首先要明白,当root为p,q的最近祖先节点,只有下面3种情况:

    1. p,q在root分别存在于root的左右子树中(异侧)——>root即为最近祖先节点
    2. p, q均在root的左侧——>p/q即为最近祖先节点
    3. p, q均在root的右侧——>同理
    在这里插入图片描述

  • 🍊递归函数的定义public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q)在以root为根节点的树中找并且返回p和q的最近的祖先节点。
    1.终止条件:

    • root == null;return null
    • root = = p 或者root = = q,直接返回p/q

    2.递推工作:(到这里说明此时p和q要么在此次递归的root的同侧或者异侧)left 用于记录在左侧进行寻找公共祖先(这里的递归函数作用就是单纯找q/p节点并且找到就返回的作用了,当然你可以另外写一个找节点的函数,但是没必要,因为定义的递归函数本身就能实现这个功能),right同理

  1. left和right均为null,说明root的左右都没有p,q,那就不存在公共节点,返回Null(有点扯,按理来说,p,q肯定是存在的,但是特判一下也不亏)

  2. left和right均不空,说明在此时递归情况是:p,q在root异侧,那么直接返回root即可
    在这里插入图片描述

    3. ⭐left不为空,right为空;right不为空,left为空。直接将不为空的那个返回即可!此时不为空的left/right指向的就是最近祖先节点。 在这里插入图片描述

三、代码

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == null || root == p || root == q){return root;}TreeNode left = lowestCommonAncestor(root.left, p, q);TreeNode right = lowestCommonAncestor(root.right, p, q);if(left != null && right !=null){return root;}else if(left == null){return right;}else if(right == null){return left;}else{return null;}}

💐若有不懂的地方,欢迎随时在评论区or私信找瑶瑶子交流讨论🌺

在这里插入图片描述

  • Java岛冒险记【从小白到大佬之路】

  • LeetCode每日一题–进击大厂

  • Go语言核心编程

  • 算法

http://www.lryc.cn/news/125068.html

相关文章:

  • android ndk clang交叉编译ffmpeg动态库踩坑
  • 简单记录牛客top101算法题(初级题C语言实现)BM24 二叉树的中序遍历 BM28 二叉树的最大深度 BM29 二叉树中和为某一值的路径
  • 前后端分离------后端创建笔记(05)用户列表查询接口(上)
  • 性能测试|App性能测试需要关注的指标
  • Termux SFTP 进行远程文件传输
  • Sqlite3简介
  • K8S调度
  • vue+element多层表单校验prop和rules
  • Dubbo 核心概念和架构
  • 【数据结构OJ题】反转链表
  • Java8 Stream 之groupingBy 分组讲解
  • 优哲SSD大文件写性能测试
  • Python基础教程: json序列化详细用法介绍
  • 一张图看懂 USDT三种类型地址 Omni、ERC20、TRC20的区别
  • SegFormer之模型训练
  • Azure资源命名和标记决策指南
  • 【在一个升序数组中插入一个数仍升序输出】
  • 图像去雨、去雪、去雾论文学习记录
  • YARN框架和其工作原理流程介绍
  • 多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测
  • centos上下载redis
  • 黑马项目一阶段面试58题 Web14题(二)
  • 软考高项-思维导图34-36(计算机高级系统项目管理师)
  • C++的stack和queue+优先队列
  • Ubuntu 18.04.6 Android Studio Giraffe adb logcat 无法使用
  • Python采集天气数据,做可视化分析【附源码】
  • 优维低代码实践:自定义模板
  • 电商3D产品渲染简明教程
  • 探索未来:元宇宙与Web3的无限可能
  • GraphQL(六)登录态校验Directive