温州专业手机网站制作多少钱wordpress调用标签云

张小明 2026/1/14 22:47:51
温州专业手机网站制作多少钱,wordpress调用标签云,网站建设公司北京华网天下实惠,sem和seo是什么职业岗位865. 具有所有最深节点的最小子树 问题描述 给定一个二叉树的根节点 root#xff0c;返回包含所有最深节点的最小子树的根节点。 最深节点#xff1a;距离根节点最远的叶子节点 最小子树#xff1a;满足条件的子树中节点数最少的那个#xff08;如果多个子树包含所有最深节…865. 具有所有最深节点的最小子树问题描述给定一个二叉树的根节点root返回包含所有最深节点的最小子树的根节点。最深节点距离根节点最远的叶子节点最小子树满足条件的子树中节点数最少的那个如果多个子树包含所有最深节点返回深度最大的那个注意一个节点也可以是自己的子树最深节点可能有多个示例输入:root[3,5,1,6,2,0,8,null,null,7,4]输出:[2,7,4]解释:最深节点是7和4包含它们的最小子树根节点是23 / \ 5 1 / \ / \ 6 2 0 8 / \ 7 4输入:root[1]输出:[1]输入:root[0,1,3,null,2]输出:[2]解释:最深节点只有2所以最小子树就是[2]0 / \ 1 3 \ 2算法思路深度优先搜索 返回深度和节点核心最深节点一定在树的最大深度层包含所有最深节点的最小子树 最深节点的最近公共祖先LCA关键如果左右子树的最大深度相等说明最深节点分布在两侧当前节点就是答案如果左子树深度 右子树深度答案在左子树中如果右子树深度 左子树深度答案在右子树中DFS对每个节点递归计算左右子树的最大深度同时返回该子树中包含所有最深节点的最小子树根节点通过比较左右子树深度来决定当前节点是否为答案返回值方法返回一个对象包含子树根节点和最大深度或者使用全局变量记录方法只返回深度代码实现方法一返回深度和节点classSolution{/** * 返回包含所有最深节点的最小子树 * 使用DFS返回每个子树的深度和对应的最小子树根节点 * * param root 二叉树根节点 * return 最小子树的根节点 */publicTreeNodesubtreeWithAllDeepest(TreeNoderoot){Resultresultdfs(root);returnresult.node;}/** * DFS * return Result对象包含子树根节点和最大深度 */privateResultdfs(TreeNodenode){// 空节点深度为0节点为nullif(nodenull){returnnewResult(null,0);}// 递归处理左右子树Resultleftdfs(node.left);Resultrightdfs(node.right);// 如果左子树深度更大答案在左子树中if(left.depthright.depth){returnnewResult(left.node,left.depth1);}// 如果右子树深度更大答案在右子树中elseif(right.depthleft.depth){returnnewResult(right.node,right.depth1);}// 左右子树深度相等当前节点就是答案else{returnnewResult(node,left.depth1);}}/** * 存储子树根节点和深度 */privatestaticclassResult{TreeNodenode;intdepth;Result(TreeNodenode,intdepth){this.nodenode;this.depthdepth;}}}方法二全局变量 返回深度classSolution{privateTreeNoderesult;privateintmaxDepth;/** * 使用全局变量记录 */publicTreeNodesubtreeWithAllDeepest(TreeNoderoot){resultnull;maxDepth-1;dfs(root,0);returnresult;}/** * 返回以node为根的子树的最大深度 * 同时更新全局答案 */privateintdfs(TreeNodenode,intdepth){if(nodenull){returndepth;}// 获取左右子树的最大深度intleftDepthdfs(node.left,depth1);intrightDepthdfs(node.right,depth1);// 当前子树的最大深度intcurrentMaxDepthMath.max(leftDepth,rightDepth);// 如果左右子树深度相等说明当前节点包含所有最深节点if(leftDepthrightDepth){// 更新全局深度更大的优先if(currentMaxDepthmaxDepth){maxDepthcurrentMaxDepth;resultnode;}}returncurrentMaxDepth;}}方法三先找最深节点再找LCAimportjava.util.*;classSolution{/** * 先找到所有最深节点再找它们的LCA */publicTreeNodesubtreeWithAllDeepest(TreeNoderoot){if(rootnull)returnnull;// 找到最大深度intmaxDepthgetMaxDepth(root);// 找到所有最深节点SetTreeNodedeepestNodesnewHashSet();findDeepestNodes(root,deepestNodes,maxDepth,1);// 如果只有一个最深节点直接返回if(deepestNodes.size()1){returndeepestNodes.iterator().next();}// 找所有最深节点的LCAreturnfindLCA(root,deepestNodes);}privateintgetMaxDepth(TreeNodenode){if(nodenull)return0;return1Math.max(getMaxDepth(node.left),getMaxDepth(node.right));}privatevoidfindDeepestNodes(TreeNodenode,SetTreeNodedeepestNodes,intmaxDepth,intcurrentDepth){if(nodenull)return;if(currentDepthmaxDepth){deepestNodes.add(node);return;}findDeepestNodes(node.left,deepestNodes,maxDepth,currentDepth1);findDeepestNodes(node.right,deepestNodes,maxDepth,currentDepth1);}privateTreeNodefindLCA(TreeNodenode,SetTreeNodetargets){if(nodenull)returnnull;// 如果当前节点是最深节点之一if(targets.contains(node)){returnnode;}TreeNodeleftfindLCA(node.left,targets);TreeNoderightfindLCA(node.right,targets);// 如果左右子树都包含目标节点当前节点是LCAif(left!nullright!null){returnnode;}// 否则返回非空的一侧returnleft!null?left:right;}}算法分析时间复杂度O(n)每个节点只被访问一次方法一和二只需要一次DFS遍历方法三需要多次遍历总体仍是O(n)空间复杂度O(h)h是树的高度递归栈空间方法一O(h)递归栈 Result对象方法二O(h)递归栈 全局变量方法三O(n)存储最深节点的Set算法过程1root [3,5,1,6,2,0,8,null,null,7,4]DFS叶子节点6,7,4,0,8返回(node, depth1)节点2left (7,1), right (4,1)深度相等 → 返回(2, 2)节点5left (6,1), right (2,2)right.depth left.depth → 返回(2, 3)节点1left (0,1), right (8,1)深度相等 → 返回(1, 2)根节点3left (2,3), right (1,2)left.depth right.depth → 返回(2, 4)结果节点22root [0,1,3,null,2]DFS节点2返回(2,1)节点1left (null,0), right (2,1)→ 返回(2,2)节点3返回(3,1)根节点0left (2,2), right (3,1)→ 返回(2,3)结果节点2测试用例// TreeNode定义classTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(){}TreeNode(intval){this.valval;}TreeNode(intval,TreeNodeleft,TreeNoderight){this.valval;this.leftleft;this.rightright;}}publicclassMain{publicstaticvoidmain(String[]args){SolutionsolutionnewSolution();// 测试用例1标准示例TreeNoderoot1newTreeNode(3);root1.leftnewTreeNode(5);root1.rightnewTreeNode(1);root1.left.leftnewTreeNode(6);root1.left.rightnewTreeNode(2);root1.right.leftnewTreeNode(0);root1.right.rightnewTreeNode(8);root1.left.right.leftnewTreeNode(7);root1.left.right.rightnewTreeNode(4);TreeNoderesult1solution.subtreeWithAllDeepest(root1);System.out.println(Test 1: result1.val);// 2// 测试用例2单节点TreeNoderoot2newTreeNode(1);TreeNoderesult2solution.subtreeWithAllDeepest(root2);System.out.println(Test 2: result2.val);// 1// 测试用例3链状树TreeNoderoot3newTreeNode(0);root3.leftnewTreeNode(1);root3.left.rightnewTreeNode(2);root3.rightnewTreeNode(3);TreeNoderesult3solution.subtreeWithAllDeepest(root3);System.out.println(Test 3: result3.val);// 2// 测试用例4完全平衡树TreeNoderoot4newTreeNode(1);root4.leftnewTreeNode(2);root4.rightnewTreeNode(3);TreeNoderesult4solution.subtreeWithAllDeepest(root4);System.out.println(Test 4: result4.val);// 1// 测试用例5左偏树TreeNoderoot5newTreeNode(1);root5.leftnewTreeNode(2);root5.left.leftnewTreeNode(3);TreeNoderesult5solution.subtreeWithAllDeepest(root5);System.out.println(Test 5: result5.val);// 3// 测试用例6右偏树TreeNoderoot6newTreeNode(1);root6.rightnewTreeNode(2);root6.right.rightnewTreeNode(3);TreeNoderesult6solution.subtreeWithAllDeepest(root6);System.out.println(Test 6: result6.val);// 3// 测试用例7三个最深节点TreeNoderoot7newTreeNode(1);root7.leftnewTreeNode(2);root7.rightnewTreeNode(3);root7.left.leftnewTreeNode(4);root7.left.rightnewTreeNode(5);root7.right.leftnewTreeNode(6);TreeNoderesult7solution.subtreeWithAllDeepest(root7);System.out.println(Test 7: result7.val);// 1}}关键点深度相等左右子树深度相等说明最深节点分布在两侧当前节点是这些最深节点的最近公共祖先为什么深度更大的优先要求最小子树在多个满足条件的子树中深度更大的子树包含的节点更少。递归通过比较子树深度找到了包含所有最深节点的最小子树不需要显式找到所有最深节点边界处理空树返回null单节点返回自身只有一个最深节点返回该节点常见问题为什么不用先找到所有最深节点再找LCA需要额外的存储空间和多次遍历。DFS一次遍历更高效。时间复杂度为什么是O(n)每个节点只被访问一次。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

正规网站建设空间免费企业网站源代码

第一章:智能 Agent 的 Docker 容器编排策略概述在现代分布式系统中,智能 Agent 通常以微服务形式运行于容器化环境中,其高效协同依赖于合理的容器编排策略。Docker 结合编排工具如 Docker Swarm 或 Kubernetes,能够实现智能 Agent…

张小明 2026/1/9 10:46:02 网站建设

做的好的排版网站判断网站开发语言

VentoyPlugson终极指南:图形化配置多系统启动盘的快速上手方法 【免费下载链接】Ventoy 一种新的可启动USB解决方案。 项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy VentoyPlugson是Ventoy项目的官方图形化配置工具,专为简化多系统启…

张小明 2026/1/6 20:43:45 网站建设

网站维护要做哪些工作ppt模板免费下载 素材红色主题

上网本配件与云生活指南 上网本配件:丰富体验的关键 上网本最初的一大目标市场是内容消费者。它开箱即用就能提供出色的移动娱乐体验,但选择一些精心挑选的娱乐配件,能进一步提升使用感受。 配件名称 价格 适用人群 特点 USB Chocolate MP3 Player 2GB $39.00 旅行…

张小明 2026/1/9 17:56:58 网站建设

网站开发充值功能外贸响应式网站

Langchain-Chatchat能否支持数据库直连知识源? 在企业智能化转型的浪潮中,越来越多组织开始构建基于大模型的知识问答系统。然而,一个现实难题摆在面前:企业的核心知识往往并不存放在PDF或Word文档里,而是深藏于MySQL、…

张小明 2026/1/2 2:41:16 网站建设

国外购物网站系统广州建设专业网站

SQLServer2019安装步骤教程对ACE-Step数据存储层设计的启示 在生成式AI迅猛发展的今天,音乐创作正经历一场静默却深刻的变革。曾经依赖专业作曲家与复杂DAW(数字音频工作站)的工作流程,如今正被像 ACE-Step 这样的开源AI模型逐步重…

张小明 2026/1/2 2:41:16 网站建设

网站建设百度首页外贸企业论坛网站建设

GPT-SoVITS模型蒸馏方案:从大模型到轻量化部署 在智能语音交互日益普及的今天,用户不再满足于“能说话”的机器助手,而是期待一个音色独特、表达自然、具备个性化的数字声音形象。然而,传统语音合成系统往往需要数小时高质量录音…

张小明 2026/1/2 2:41:14 网站建设