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

题目链接

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.mzph.cn/news/70020.shtml

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

相关文章

车内信息安全技术-安全技术栈-软件安全

操作系统 1.隔离技术 信息安全中的隔离技术通常指的是将不同安全级别的信息或数据隔离开来,以保护敏感信息不受未授权的访问或泄露。在操作系统中,常见的隔离技术包括:虚拟化技术:通过虚拟化软件,将物理计算机分割成多个独立的虚拟计算机,每个虚拟计算机都可以运行独立的…

实战:大数据Flink CDC同步Mysql数据到ElasticSearch

文章目录 前言知识积累CDC简介CDC的种类常见的CDC方案比较 Springboot接入Flink CDC环境准备项目搭建 本地运行集群运行将项目打包将包传入集群启动远程将包部署到flink集群 写在最后 前言 前面的博文我们分享了大数据分布式流处理计算框架Flink和其基础环境的搭建&#xff0c…

MySQL 用户授权管理及白名单

1.创建用户 在 MySQL 中&#xff0c;你可以通过以下步骤创建用户并设置白名单&#xff1a; 使用管理员账号连接到 MySQL 服务器。 创建新用户&#xff1a; CREATE USER usernamehostname IDENTIFIED BY password;其中&#xff0c; username 是你要创建的用户名&#xff1b;ho…

SpringBoot几个常用的注解

&#xff08;1&#xff09;RestController和Controller指定一个类&#xff0c;作为控制器的注解 &#xff08;2&#xff09;RequestMapping方法级别的映射注解&#xff0c;这一个用过Spring MVC的小伙伴相信都很熟悉 &#xff08;3&#xff09;EnableAutoConfiguration和Spri…

LeetCode73.矩阵置零

这道题我感觉还是挺简单的&#xff0c;一下子就想到了&#xff0c;不过我的算法很简单很垃圾&#xff0c;效率很低&#xff0c;我一看完题的想法就是直接遍历一遍数组&#xff0c;然后把为0的元素的行和列都存起来&#xff0c;然后把这些行和列都置零就好了&#xff0c;但是这里…

万物互联:软件与硬件的协同之道

在当今数字化时代&#xff0c;我们身边的一切似乎都与计算机和互联网有关。从智能手机到智能家居设备&#xff0c;从自动驾驶汽车到工业生产线&#xff0c;无论我们走到哪里&#xff0c;都能看到软件和硬件的协同作用。本文将探讨这种协同作用&#xff0c;解释软件和硬件如何相…

【Java】Java反射技术简介

Java反射技术是一种强大的工具&#xff0c;它允许在运行时检查和修改类的行为。通过反射&#xff0c;我们可以加载并操作类&#xff0c;创建对象&#xff0c;调用方法&#xff0c;获取和设置字段等。这种技术在Java编程中非常有用&#xff0c;特别是对于框架&#xff0c;工具和…

NIO原理浅析(二)

IO分类 阻塞和非阻塞 阻塞IO&#xff1a;用户空间引发内核空间的系统调用&#xff0c;需要内核IO操作彻底完成之后&#xff0c;返回值才会返回到用户空间&#xff0c;执行用户的操作。阻塞指的用户空间程序的执行状态&#xff0c;用户空间程序需要等到IO操作彻底执行完毕。j…

前端面试0906

// 请给出输出结果 function foo(){ console.log(a); } function bar(){ var a 3; console.log(this.a); foo(); } var a 2; bar(); 2 2 // 请从下面的问题中挑选3道进行回答 1. 防抖和节流分别是什么&#xff0c;一般用在什么场景&#xff1f; 防抖&#xff08;Debounc…

简易版人脸识别qt opencv

1、配置文件.pro #------------------------------------------------- # # Project created by QtCreator 2023-09-05T19:00:36 # #-------------------------------------------------QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsTARGET 01_face TEMP…

代码随想录笔记--二叉树篇

目录 1--递归遍历 1-1--前序遍历 1-2--中序遍历 1-3--后序遍历 2--迭代遍历 2-1--前序遍历 2-2--后序遍历 2-3--中序遍历 3--二叉树的层序遍历 4--翻转二叉树 5--对称二叉树 6--二叉树最大深度 7--二叉树的最小深度 8--完全二叉树节点的数量 9--平衡二叉树 10-…

MongoDB 数据库性能优化技巧

原文&#xff1a;MongoDB 数据库性能优化技巧 (techdatafuture.com) MongoDB 是一款灵活且可扩展的NoSQL数据库&#xff0c;为了提高其性能&#xff0c;我们可以采取一些优化技巧。本文将介绍一些MongoDB性能优化的关键点&#xff0c;包括索引的使用、查询优化、数据模型设计和…

Git基础命令

目录 一、关于Git1.什么是Git&#xff1f;2.Git优点3.什么是版本控制&#xff1f;4.版本控制工具5.版本控制软件的基础功能 二、Git基础命令1.init2.clone3.config4.status5.add 文件名6.commit -m 描述7.log8.branch分支名9.tag 一、关于Git 1.什么是Git&#xff1f; Git是一…

PyCharm 虚拟环境搭建

Anaconda搭建虚拟环境 安装 前往Anaconda官网&#xff08;https://www.anaconda.com/products/individual&#xff09;&#xff0c;下载适合您操作系统的Anaconda版本&#xff0c;建议下载最新的稳定版。这里可以直接进入这个&#xff1a;https://repo.anaconda.com/archive/ …

AVR128单片机 USART通信控制发光二极管显示

一、系统方案 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 void port_init(void) { PORTA 0xFF; DDRA 0x00;//输入 PORTB 0xFF;//低电平 DDRB 0x00;//输入 PORTC 0xFF;//低电平 DDRC 0xFF;//输出 PORTE 0xFF; DDRE 0xfE;//输出 PO…

无涯教程-JavaScript - DCOUNT函数

描述 DCOUNT函数返回包含与您指定条件匹配的列表或数据库的列中的数字的单元格的计数。 语法 DCOUNT (database, field, criteria)争论 Argument描述Required/Optionaldatabase 组成列表或数据库的单元格范围。 数据库是相关数据的列表,其中相关信息的行是记录,数据的列是…

编译CentOS6.10系统的OpenSSHV9.4rpm安装包

目前OpenSSH版本已至9.4&#xff0c;其作为操作系统底层管理平台软件&#xff0c;需要保持更新以免遭受安全攻击&#xff0c;编译生成rpm包是生产环境中批量升级的最佳途径。编译软件包时与当前的运行环境有较大关系&#xff0c;请注意本安装包系在CentOS6.10原生系统纯净系统下…

Ubuntu下QT操作Mysql数据库

本篇总结一下一下Ubuntu下QT操作Mysql数据库。 目录 1. 启动Mysql数据库服务器 2.查看QT支持的数据库驱动 3.连接数据库 4. 增加表和记录 5. 删除记录 6. 修改记录 7. 查询记录 8.完整代码和运行效果 常见错误总结&#xff1a; (1) 数据库服务没启动报错信息 (2) 有…

【Vuex状态管理】Vuex的基本使用;核心概念State、Getters、Mutations、Actions、Modules的基本使用

目录 1_应用状态管理1.1_状态管理1.2_复杂的状态管理1.3_Vuex的状态管理 2_Vuex的基本使用2.1_安装2.2_创建Store2.3_组件中使用store 3_核心概念State3.1_单一状态树3.2_组件获取状态3.3_在setup中使用mapState 4_核心概念Getters4.1_getters的基本使用4.2_getters第二个参数4…

SpringBoot整合MQ

1.创建工程并引入依赖 <!-- 添加rocketmq的启动器--><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.1.1</version></dependency>2.编写…