Leetcode.1123 最深叶节点的最近公共祖先

news2024/11/27 6:25:22

题目链接

Leetcode.1123 最深叶节点的最近公共祖先 rating : 1607

题目描述

给你一个有根节点 root 的二叉树,返回它 最深的叶节点的最近公共祖先 。

回想一下:

  • 叶节点 是二叉树中没有子节点的节点;
  • 树的根节点的 深度 0 0 0,如果某一节点的深度为 d d d,那它的子节点的深度就是 d + 1 d+1 d+1
  • 如果我们假定 A A A 是一组节点 S S S最近公共祖先 S S S 中的每个节点都在以 A A A 为根节点的子树中,且 A A A 的深度达到此条件下可能的最大值。

示例 1:

在这里插入图片描述

输入:root = [3,5,1,6,2,0,8,null,null,7,4]
输出:[2,7,4]
解释:我们返回值为 2 的节点,在图中用黄色标记。
在图中用蓝色标记的是树的最深的节点。
注意,节点 6、0 和 8 也是叶节点,但是它们的深度是 2 ,而节点 7 和 4 的深度是 3 。

示例 2:

输入:root = [1]
输出:[1]
解释:根节点是树中最深的节点,它是它本身的最近公共祖先。

示例 3:

输入:root = [0,1,3,null,2]
输出:[2]
解释:树中最深的叶节点是 2 ,最近公共祖先是它自己。

提示:

  • 树中的节点数将在 [ 1 , 1000 ] [1, 1000] [1,1000] 的范围内。
  • 0 ≤ N o d e . v a l ≤ 1000 0 \leq Node.val \leq 1000 0Node.val1000
  • 每个节点的值都是 独一无二 的。

解法:递归自顶向下

  • 我们维护一个整棵树的最大深度 m a x _ d e p t h max\_depth max_depth
  • 我们用 d d d 表示当前节点的深度;
  • 我们用 l l l 表示以当前节点 n o d e node node 为根的 左子树 中最深叶子节点的深度;
  • 我们用 r r r 表示以当前节点 n o d e node node 为根的 右子树 中最深叶子节点的深度;
  • 如果 l = r , l = m a x _ d e p t h l = r,l = max\_depth l=r,l=max_depth,说明当前节点 n o d e node node 就是当前子树中最深叶子节点的最近公共父节点
  • 我们在 向下递 的过程中不断地更新树的最大深度 m a x _ d e p t h max\_depth max_depth向上归 时候返回以当前节点 n o d e node node 为根的子树最深叶子节点的深度,即 m a x ( l , r ) max(l,r) max(l,r)

时间复杂度: O ( n ) O(n) O(n)

C++代码:

class Solution {
public:
    TreeNode* lcaDeepestLeaves(TreeNode* root) {
        TreeNode* ans = nullptr;
        int max_depth = -1;

        function<int(TreeNode*,int)> dfs = [&](TreeNode* node,int d)->int{
            if(node == nullptr){
                max_depth = max(max_depth , d);
                return d;
            }

            int l = dfs(node->left,d + 1);
            int r = dfs(node->right,d + 1);

            if(l == r && l == max_depth) ans = node;

            return max(l,r);
        };

        dfs(root,0);

        return ans;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/979790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年09月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2023年09月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

【数据分享】2006-2021年我国省份级别的供水相关指标(20多项指标)

《中国城市建设统计年鉴》中细致地统计了我国城市市政公用设施建设与发展情况&#xff0c;在之前的文章中&#xff0c;我们分享过基于2006-2021年《中国城市建设统计年鉴》整理的2006—2021年我国省份级别的市政设施水平相关指标、2006-2021年我国省份级别的各类建设用地面积数…

Windows11系统提示msvcp140.dll丢失的解决方法,总共有四个解决方法

msvcp140.dll 丢失是许多 Windows 用户都可能遇到的问题&#xff0c;这会导致许多程序无法正常运行&#xff0c;甚至系统崩溃。那么&#xff0c;我们该如何解决这个问题呢&#xff1f;请听我详细道来。 一、遇到的问题 在我的电脑上&#xff0c;msvcp140.dll 丢失的问题表现为…

保姆级教程——VSCode如何在Mac上配置C++的运行环境

vscode官方下载&#xff1a; 点击官网链接&#xff0c;下载对应的pkg&#xff0c;安装打开&#xff1b; https://code.visualstudio.com/插件安装 点击箭头所指插件商店按钮&#xff0c;yyds&#xff1b; 下载C/C 插件&#xff1b; ![外链图片转存 下载CodeLLDB插件&#x…

命令执行漏洞(附例题)

一.原理 应用有时需要调用一些执行系统命令的函数&#xff0c;如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等&#xff0c;当用户能控制这些函数的参数时&#xff0c;就可以将恶意系统命令拼接到正常命令中&#xff0c;从而造成命令执行攻击。 二.利用条…

SpringMVC入门的注解、参数传递、返回值和页面跳转---超详细教学

前言&#xff1a; 欢迎阅读Spring MVC入门必读&#xff01;在这篇文章中&#xff0c;我们将探索这个令人兴奋的框架&#xff0c;它为您提供了一种高效、灵活且易于维护的方式来构建Web应用程序。通过使用Spring MVC&#xff0c;您将享受到以下好处&#xff1a;简洁的代码、强大…

鼠标键盘管理 ShareMouse for Mac最新

软件“ShareMouse”允许您通过单个鼠标和键盘控制多台计算机&#xff1a; 将鼠标移动到您想要控制的计算机的监视器上&#xff0c;指针会神奇地跳转到该计算机。任何鼠标和键盘输入都会传输到相应的计算机。 与网络KVM类似&#xff0c;ShareMouse通过本地LAN传输鼠标移动和点…

基于SpringBoot的班级管理系统【附源码】

基于SpringBootVue前后端分离的班级管理系统 可提供远程部署安装运行 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVueElementUI工具&#xff1a;IDEA/EcilpsemysqlNavicat 登陆界面 班级管理 学生管理 班干部管理 班级公告 班级活…

06-mq

1、消息队列有什么优点和缺点? 优点&#xff1a; 解耦、异步、削峰填谷。 缺点&#xff1a; 系统可用性降低 系统复杂性提高 一致性问题 2、常见消息队列的比较 3、Kafka的特性 1.消息持久化 2.高吞吐量 3.扩展性强&#xff08;动态&#xff09;4集群&#xff0b;4台集群…

Mysql--技术文档--B+树-数据结构的认知

阿丹解读&#xff1a; 之前的文章中写道了有关mysql底层索引&#xff0c;那么在数据量特别大的情况下。mysql采用了B来管理索引。和存储的数据。 Mysql--技术文档--索引-《索引为什么查找数据快&#xff1f;》-超底层详细说明索引_一单成的博客-CSDN博客 B树解读&#xff1a…

【综述】跨模态可信感知

文章目录 跨模态可信感知综述摘要引言跨协议通信模式PCP网络架构 跨模态可信感知跨模态可信感知的概念跨模态可信感知的热点研究场景目前存在的挑战可能改进的方案 参考文献 跨模态可信感知综述 摘要 随着人工智能相关理论和技术的崛起&#xff0c;通信和感知领域的研究引入了…

目前无法建立VS2013与Qt的连接???

因为下载组件的时候&#xff0c;没有哪个选项&#xff0c;还是没有MSVC2013

【云原生进阶之PaaS中间件】第一章Redis-1.5.1安装配置

1 Redis环境安装配置 在本节中&#xff0c;您将了解和学习Redis的环境安装设置。 1.1 在Ubuntu上安装Redis 要在Ubuntu上安装Redis&#xff0c;打开终端并键入以下命令 - [yiibaiubuntu:~]$ sudo apt-get update [yiibaiubuntu:~]$ sudo apt-get install redis-server 这将在…

教师必备 查分省时又省心

亲爱的老师们&#xff01;你是否也曾为每次发布成绩而烦恼&#xff1f;每次都要将整个成绩表发到群里&#xff0c;再一个个回答家长的查询问题&#xff0c;简直是一场噩梦&#xff01;但是&#xff0c;别担心&#xff0c;我给各位老师带来了最好的解决方案——易查分&#xff0…

【iVX】十五分钟制作一款小游戏,iVX真有怎么神?

个人主页&#xff1a;【&#x1f60a;个人主页】 新人博主&#xff0c;喜欢就关注一下呗~ 文章目录 前言iVX介绍初上手布置背景制作可移动物体总结&#xff08;完善步骤&#xff09; 前言 在上篇文章中&#xff0c;我向大家介绍了一种打破常规的编程方式——iVX&#xff0c;可…

每期一个小窍门: 一文助你理解火焰图

火焰图&#xff08;flame graph&#xff09;是性能分析的利器。本文介绍它的基本用法。 perf 命令 让我们从 perf 命令&#xff08;performance 的缩写&#xff09;讲起&#xff0c;它是 Linux 系统原生提供的性能分析工具&#xff0c;会返回 CPU 正在执行的函数名以及调用栈&…

Kafka3.0.0版本——文件清理策略

目录 一、文件清理策略1.1、文件清理策略的概述1.2、文件清理策略的官方文档1.3、日志超过了设置的时间如何处理1.3.1、delete日志删除&#xff08;将过期数据删除&#xff09;1.3.2、compact日志压缩 一、文件清理策略 1.1、文件清理策略的概述 Kafka 中默认的日志保存时间为…

sql:SQL优化知识点记录(十二)

&#xff08;1&#xff09;读锁案例讲解 加读锁和写锁 查看是否上锁&#xff1a;In_use&#xff1a;变成了1 读写锁对我们数据产生哪些影响&#xff1a; 读锁&#xff1a;是共享锁&#xff0c;其他线程可以查看&#xff1a; 加了读锁&#xff1a;session1不能修改自己&#xf…

JDK7多线程并发环境HashMap死循环infinite loop,CPU拉满100%,Java

JDK7多线程并发环境HashMap死循环infinite loop&#xff0c;CPU拉满100%&#xff0c;Java HashMap底层数据实现是数组链表&#xff0c;链表在哈希碰撞后装入新数据&#xff0c;像是一个桶。 HashMap在JDK7的实现中&#xff0c;并发环境存在死循环infinite loop问题。导致的结果…

Leetcode刷题笔记--Hot41-50

1--二叉树的层序遍历&#xff08;102&#xff09; 主要思路&#xff1a; 经典广度优先搜索&#xff0c;基于队列&#xff1b; 对于本题需要将同一层的节点放在一个数组中&#xff0c;因此遍历的时候需要用一个变量 nums 来记录当前层的节点数&#xff0c;即 nums 等于队列元素的…