news 2026/6/15 21:01:42

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 15:01:49

三脚电感在PoL电源设计中的实际应用解析

三脚电感在PoL电源设计中的实战应用&#xff1a;从原理到布局的全链路解析你有没有遇到过这样的场景&#xff1f;一款高端FPGA或AI芯片刚上电&#xff0c;电压纹波就超标&#xff0c;示波器抓到一堆高频毛刺&#xff1b;负载突变时输出电压“跳水”&#xff0c;系统直接重启&am…

作者头像 李华
网站建设 2026/6/15 15:00:28

ResNet18部署实战:边缘设备图像分类方案

ResNet18部署实战&#xff1a;边缘设备图像分类方案 1. 背景与挑战&#xff1a;通用物体识别的落地难题 在智能安防、工业质检、智能家居等场景中&#xff0c;通用物体识别是实现环境感知的核心能力。尽管深度学习模型&#xff08;如ResNet、EfficientNet&#xff09;在Image…

作者头像 李华
网站建设 2026/6/15 12:01:55

数字电路中的组合逻辑设计:硬件架构全面讲解

组合逻辑设计的艺术&#xff1a;从门电路到系统架构的深度实践在数字世界的底层&#xff0c;有一种“沉默的英雄”——它不存储状态、不依赖时钟&#xff0c;却无处不在。它是处理器中操作数选择的关键开关&#xff0c;是内存访问时地址译码的核心引擎&#xff0c;也是FPGA内部…

作者头像 李华
网站建设 2026/6/15 11:59:38

ResNet18性能优化:批处理加速推理实战

ResNet18性能优化&#xff1a;批处理加速推理实战 1. 背景与问题定义 1.1 通用物体识别中的效率瓶颈 在当前AI应用广泛落地的背景下&#xff0c;通用物体识别已成为智能监控、内容审核、辅助驾驶等场景的基础能力。ResNet-18作为经典的轻量级卷积神经网络&#xff0c;在精度…

作者头像 李华
网站建设 2026/6/15 12:00:17

ResNet18优化案例:提升小样本识别能力

ResNet18优化案例&#xff1a;提升小样本识别能力 1. 背景与挑战&#xff1a;通用物体识别中的小样本困境 在当前AI视觉应用中&#xff0c;ResNet-18 因其轻量级结构和良好的泛化能力&#xff0c;成为边缘设备和实时场景下的首选模型。基于 TorchVision 官方实现 的 ResNet-1…

作者头像 李华
网站建设 2026/6/15 12:59:46

ResNet18性能测试:并发请求处理能力

ResNet18性能测试&#xff1a;并发请求处理能力 1. 引言&#xff1a;通用物体识别中的ResNet-18角色 在当前AI应用广泛落地的背景下&#xff0c;通用图像分类已成为智能系统感知世界的基础能力之一。从智能相册自动打标签&#xff0c;到安防监控中的异常行为识别&#xff0c;…

作者头像 李华