A.每日一题——865. 具有所有最深节点的最小子树

题目链接:865. 具有所有最深节点的最小子树(中等)

完全相同的题目:1123. 最深叶节点的最近公共祖先(中等)

算法原理:

解法一:递归—整体看

0ms击败100.00%

时间复杂度O(N)

①递归二叉树,同时逐步更新全局最大深度

②“递”的时候往下传该节点的深度depth

③“归”的时候往上带回该节点所在子树的最深深度

④如果左右子树的最深深度与当前全局最深深度相同,那么我们可以更新待返回的结果,但这不能直接返回,是因为这很可能不是最深的叶子节点所在子树,如果后面还有更深的,还会继续更新

解法二:自底而上—局部看

0ms击败100.00%

时间复杂度O(N)

也可以不用全局变量记录整棵树的高度,而是把每棵子树都看成一个个子问题

left高度>right高度时,node子树高度为left高度+1,最近公共祖先是左子树的最近公共祖先

left高度<right高度时,node子树高度为right高度+1,最近公共祖先是右子树的最近公共祖先

left高度=right高度时,node子树高度为left高度+1,最近公共祖先就是node

Java代码:

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ //解法一:递归 class Solution { private int maxdepth=-1;//全局最大深度 private TreeNode ret; public TreeNode subtreeWithAllDeepest(TreeNode root) { dfs(root,0); return ret; } private int dfs(TreeNode node,int depth){ if(node==null){ maxdepth=Math.max(maxdepth,depth); return depth; } int leftdepth=dfs(node.left,depth+1); int rightdepth=dfs(node.right,depth+1); //当leftdepth==rightdepth==maxdepth时,node就是目前最佳答案 if(leftdepth==rightdepth&&leftdepth==maxdepth) ret=node; return Math.max(leftdepth,rightdepth);//往回带最深的深度 } }
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ //解法二:自底而上 class Solution { //自定义记录类:Java 16+支持record //作用:一次返回两个关键信息(最大高度,最近公共祖先) private record Pair(int height,TreeNode lca){} public TreeNode subtreeWithAllDeepest(TreeNode root) { //调用dfs获取整棵树的高度和对应LCA,直接返回LCA即可 return dfs(root).lca(); } //后序遍历:计算当前子树的高度+所有最深节点的LCA private Pair dfs(TreeNode node){ //递归出口:空节点,空树高度为0,没有节点,所以LCA为null if(node==null) return new Pair(0,null); Pair left=dfs(node.left); Pair right=dfs(node.right); //情况一:左子树最大高度>右子树最大高度 //说明最深节点在左子树中 //当前子树高度=左子树最大高度+1,LCA为左子树的LCA if(left.height()>right.height()) return new Pair(left.height()+1,left.lca()); //情况二:左子树最大高度<右子树最大高度 if(left.height()<right.height()) return new Pair(right.height()+1,right.lca()); //情况三:左右子树最大高度相等 //说明最深节点同时分布在左右子树中->当前节点就是最近公共祖先 //当前子树高度=左/右子树高度+1 return new Pair(left.height()+1,node); } }
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ //解法二的第二种写法,博主觉得比前一种写法更易懂一些 class Solution { public TreeNode subtreeWithAllDeepest(TreeNode root) { return dfs(root).getValue(); } private Pair<Integer,TreeNode> dfs(TreeNode node){ if(node==null) return new Pair<>(0,null); Pair<Integer,TreeNode> left=dfs(node.left); Pair<Integer,TreeNode> right=dfs(node.right); if(left.getKey()>right.getKey()) return new Pair(left.getKey()+1,left.getValue()); if(left.getKey()<right.getKey()) return new Pair(right.getKey()+1,right.getValue()); return new Pair(left.getKey()+1,node); } }

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

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

相关文章

ResNet18应用探索:智能养殖监测系统

ResNet18应用探索&#xff1a;智能养殖监测系统 1. 引言&#xff1a;从通用识别到垂直场景的跃迁 在人工智能加速落地的今天&#xff0c;深度学习模型不再局限于实验室或大型数据中心&#xff0c;而是逐步渗透到农业、养殖、环保等传统行业中。其中&#xff0c;ResNet18 作为…

ResNet18实战:教育场景物体识别应用开发

ResNet18实战&#xff1a;教育场景物体识别应用开发 1. 引言&#xff1a;通用物体识别与ResNet-18的教育价值 在人工智能赋能教育的背景下&#xff0c;通用物体识别技术正逐步成为智能教学系统、AR教具、学生自主学习平台的重要支撑。通过图像理解能力&#xff0c;AI可以辅助…

ResNet18部署实战:从模型加载到WebUI展示

ResNet18部署实战&#xff1a;从模型加载到WebUI展示 1. 引言&#xff1a;通用物体识别的工程落地挑战 在AI应用日益普及的今天&#xff0c;通用图像分类已成为智能相册、内容审核、辅助驾驶等场景的基础能力。尽管深度学习模型性能不断提升&#xff0c;但如何将一个高精度模…

serial通信在Linux中的TTL电平适配操作指南

串行通信实战&#xff1a;Linux下TTL电平适配全解析你有没有遇到过这种情况&#xff1f;树莓派和Arduino明明接好了线&#xff0c;代码也烧录成功&#xff0c;但就是收不到数据。或者更糟——设备一通电就“罢工”&#xff0c;GPIO口疑似烧毁&#xff1f;别急&#xff0c;这很可…

ResNet18快速入门:图像分类API开发指南

ResNet18快速入门&#xff1a;图像分类API开发指南 1. 引言&#xff1a;通用物体识别的工程价值 在计算机视觉领域&#xff0c;通用物体识别是构建智能系统的基础能力之一。无论是内容审核、智能相册管理&#xff0c;还是增强现实&#xff08;AR&#xff09;场景理解&#xf…

ResNet18应用开发:农业病虫害识别系统

ResNet18应用开发&#xff1a;农业病虫害识别系统 1. 引言&#xff1a;从通用物体识别到农业场景落地 在人工智能赋能千行百业的今天&#xff0c;深度学习模型正逐步从实验室走向田间地头。ResNet18作为经典轻量级卷积神经网络&#xff0c;在ImageNet大规模图像分类任务中表现…

手把手教程:对比arm64 amd64在Debian中的安装支持

从树莓派到数据中心&#xff1a;一文讲透 amd64 与 arm64 在 Debian 中的安装差异 你有没有遇到过这种情况&#xff1a; 在笔记本上写好的脚本&#xff0c;拿到树莓派上跑不起来&#xff1f; 明明下载了“Debian 镜像”&#xff0c;刷进 SD 卡却黑屏无输出&#xff1f; 或者…

ResNet18应用指南:多媒体内容管理系统

ResNet18应用指南&#xff1a;多媒体内容管理系统 1. 引言 在当今信息爆炸的时代&#xff0c;图像数据已成为数字内容的核心组成部分。从社交媒体到电商平台&#xff0c;从安防监控到智能相册管理&#xff0c;通用物体识别技术正广泛应用于各类多媒体内容管理系统中。然而&am…

【行业】【网络文学】2025 年网文创作范式迁移:从升级打怪到情绪价值、缝合叙事与AI副驾驶

&#x1f4d6;目录前言&#xff1a;一个时代的回响1. 发展历程&#xff1a;三个时代的浪潮与烙印1.1 2G/PC时代&#xff08;约2005-2012&#xff09;&#xff1a;草莽英雄与宏大叙事1.2 移动互联网时代&#xff08;约2013-2019&#xff09;&#xff1a;渠道为王与类型细分1.3 后…

ResNet18部署案例:教育机器人视觉模块

ResNet18部署案例&#xff1a;教育机器人视觉模块 1. 引言&#xff1a;通用物体识别在教育机器人中的价值 随着人工智能技术的普及&#xff0c;教育机器人正从简单的语音交互向多模态感知系统演进。其中&#xff0c;视觉能力是实现“理解世界”的关键一环。一个稳定、轻量且具…

grbl步进电机调试技巧:新手教程

grbl步进电机调试实战&#xff1a;从零搭建高精度运动控制系统 你是否曾遇到这样的情况——精心组装的CNC雕刻机通电后&#xff0c;电机只抖不转&#xff1f;或者明明发送了“移动10mm”的指令&#xff0c;实际却走了9.8mm&#xff1f;又或是回零时轴一路狂奔到底&#xff0c;…

工业环境下蜂鸣器选型要点:有源与无源区分全面讲解

工业蜂鸣器选型实战指南&#xff1a;有源与无源的本质区别与工程避坑全解析在一间嘈杂的自动化车间里&#xff0c;一台PLC控制柜突然发出断续的“滴滴”声——这不是故障&#xff0c;而是系统正在用声音告诉你&#xff1a;“某个电机过热了&#xff0c;请立即检查。”这种简单却…

Vitis中DPU配置与调优:实战经验总结

Vitis中DPU配置与调优&#xff1a;从零到实战的深度指南在边缘AI加速领域&#xff0c;Xilinx&#xff08;现AMD&#xff09;的Zynq UltraScale MPSoC和Versal器件凭借其“CPU FPGA”异构架构&#xff0c;成为部署高性能、低功耗推理系统的首选平台。而其中的核心利器——DPU&a…

利用FPGA实现时序逻辑电路设计实验的系统学习

从触发器到状态机&#xff1a;在FPGA上构建时序逻辑的完整实践之路你有没有试过用一堆74芯片搭一个计数器&#xff1f;插线、查手册、反复测量波形……稍有不慎&#xff0c;整个板子就“罢工”。而今天&#xff0c;我们只需一段Verilog代码&#xff0c;就能在一个FPGA芯片里实现…

Multisim安装必备组件下载与手动注入方法

Multisim安装总踩坑&#xff1f;一文搞定所有依赖组件的手动部署方案 你是不是也遇到过这种情况&#xff1a;兴致勃勃地准备安装Multisim开始电路仿真&#xff0c;结果双击安装包—— 毫无反应 &#xff1b;或者弹出一个模糊的错误提示&#xff1a;“缺少运行库”、“应用程序…

ResNet18实战教程:工业零件识别系统搭建

ResNet18实战教程&#xff1a;工业零件识别系统搭建 1. 引言 1.1 学习目标 本文将带你从零开始&#xff0c;基于 TorchVision 官方 ResNet-18 模型&#xff0c;搭建一个高稳定性、低延迟的通用图像分类系统。你将掌握&#xff1a; 如何加载预训练模型并进行推理构建轻量级 …

ResNet18实战教程:工业缺陷检测系统搭建

ResNet18实战教程&#xff1a;工业缺陷检测系统搭建 1. 引言 1.1 工业视觉检测的智能化转型 在现代制造业中&#xff0c;产品质量控制是保障生产效率与品牌信誉的核心环节。传统的人工目检方式存在主观性强、效率低、漏检率高等问题&#xff0c;难以满足高节拍、高精度的产线…

ResNet18应用开发:跨平台部署解决方案

ResNet18应用开发&#xff1a;跨平台部署解决方案 1. 引言&#xff1a;通用物体识别中的ResNet18价值 在当前AI应用快速落地的背景下&#xff0c;通用图像分类已成为智能设备、内容审核、辅助视觉等场景的基础能力。其中&#xff0c;ResNet-18 作为深度残差网络&#xff08;R…

ResNet18实战:基于Flask的WebUI开发完整教程

ResNet18实战&#xff1a;基于Flask的WebUI开发完整教程 1. 引言 1.1 通用物体识别的现实需求 在智能安防、内容审核、辅助驾驶和智能家居等场景中&#xff0c;通用物体识别是AI视觉能力的核心基础。用户上传一张图片&#xff0c;系统能自动判断其中包含的物体类别&#xff…

ResNet18入门教程:从零开始学习图像分类技术

ResNet18入门教程&#xff1a;从零开始学习图像分类技术 1. 引言&#xff1a;为什么选择ResNet18进行图像分类&#xff1f; 在深度学习领域&#xff0c;图像分类是计算机视觉的基础任务之一。无论是识别一张照片中的物体&#xff0c;还是理解场景语义&#xff0c;都需要一个高…