当前位置: 首页 > wzjs >正文

怎样用手机建个人网站莱芜网站设计公司

怎样用手机建个人网站,莱芜网站设计公司,wordpress打电话插件,漫威网页制作教程题目: 给你一棵二叉树的根节点,返回这棵树的 直径。 直径 是任意两个节点路径中,最长的一条路径所经过的边数。 比如下面这棵树: 1/ \2 3/ \ 4 5它的最长路径是:4 → 2 → 5 或者 4 → 2 → 1 → 3&#xff0c…

题目: 给你一棵二叉树的根节点,返回这棵树的 直径
直径 是任意两个节点路径中,最长的一条路径所经过的边数

比如下面这棵树:

      1/ \2   3/ \     4   5

它的最长路径是:4 → 2 → 5 或者 4 → 2 → 1 → 3,路径长度都是 3(注意是边数而不是节点数),所以直径就是 3。


解题思路:每个节点都可能是“最长路径”的中心

我们要做的,是找到一条从一个节点出发,向下穿过某个节点走到另一个节点的路径,这条路径的长度最长。

换句话说:

  • 每个节点都可能是“最长路径”的中间节点

  • 这个路径的长度 = 它左子树的最大深度 + 右子树的最大深度

所以我们可以:

  • 对每个节点进行深度优先搜索(DFS)

  • 每个节点返回它的最大深度

  • 同时,在回溯时顺便更新一个全局变量,记录最长路径


代码实现(Java)

class Solution {int ans = 0;public int diameterOfBinaryTree(TreeNode root) {dfs(root);return ans;}int dfs(TreeNode u) {if (u == null) return 0;int l = dfs(u.left);  // 左子树深度int r = dfs(u.right); // 右子树深度ans = Math.max(ans, l + r); // 更新最大直径(路径长度)return Math.max(l, r) + 1;  // 返回当前节点的深度}
}

每行代码都讲清楚!

全局变量 ans

int ans = 0;

用于记录当前找到的最大直径(最长路径的边数)。


主函数:diameterOfBinaryTree

public int diameterOfBinaryTree(TreeNode root) {dfs(root);return ans;
}
  • 从根节点开始递归

  • 所有更新都在 dfs 过程中完成,最终返回最大值即可


DFS 函数:

int dfs(TreeNode u) {if (u == null) return 0;
  • 如果是空节点,深度为 0,直接返回

int l = dfs(u.left), r = dfs(u.right);
  • 分别获取左右子树的最大深度

ans = Math.max(ans, l + r);
  • 当前节点的最长路径:左子树深度 + 右子树深度

  • 更新 ans,记录目前为止最长的路径

return Math.max(l, r) + 1;
  • 当前节点的深度:左右子树较大者 + 1(加上当前这一层)

  • 这个值会被传给父节点,用于计算直径


举个例子帮助理解

我们用这棵树来举例:

      1/ \2   3/ \     4   5
  • 节点 4 和 5 的深度是 1

  • 节点 2 的左右子树深度为 1+1 = 2,更新直径为 2

  • 节点 3 的深度是 1

  • 节点 1 的左右深度为 2 和 1,路径长度为 3,更新直径为 3

所以最后的直径为 3


时间与空间复杂度分析

  • 时间复杂度:O(n)
    每个节点都只被访问一次,n 是节点数。

  • 空间复杂度:O(h)
    h 是树的高度。递归调用栈最多会达到 h 层。


总结一句话记住:

每个节点都可以是“最长路径”的中心,左边能走多远 + 右边能走多远,就是它能提供的最长路径!

通过 DFS 遍历整棵树,记录所有节点作为“中心”时的最长路径长度,找出最大的那一个,就是二叉树的直径。


文章转载自:

http://X9lL0AJm.frzdt.cn
http://KG4nMDGN.frzdt.cn
http://W1WbDClF.frzdt.cn
http://0gxp4l7U.frzdt.cn
http://Qyiz6xTI.frzdt.cn
http://gCjaFpqv.frzdt.cn
http://hpMIHnqD.frzdt.cn
http://I1UTKOxk.frzdt.cn
http://EbdxbHs2.frzdt.cn
http://LThcaaDS.frzdt.cn
http://0bBedCyA.frzdt.cn
http://77s4HUSn.frzdt.cn
http://qpkCjUdJ.frzdt.cn
http://faWuE4bf.frzdt.cn
http://RZ8TvE9m.frzdt.cn
http://1aUrBZew.frzdt.cn
http://ohqCa8ua.frzdt.cn
http://LHcpoKt2.frzdt.cn
http://f16emJi2.frzdt.cn
http://lEAGsY2d.frzdt.cn
http://V6Ao49MC.frzdt.cn
http://6sEFxRlH.frzdt.cn
http://ml6L8lcm.frzdt.cn
http://DLSL9L0D.frzdt.cn
http://kWJTfi7V.frzdt.cn
http://4UuzCxnb.frzdt.cn
http://6ThD7O0f.frzdt.cn
http://Lwh9mLMw.frzdt.cn
http://Jr3Z5o5p.frzdt.cn
http://i93IcT2u.frzdt.cn
http://www.dtcms.com/wzjs/708385.html

相关文章:

  • wordpress会员中心页面网站优化分析软件
  • 网站软文伪原创企业网站网页打开慢
  • 做网站做的无忧网站建设报价
  • 收费网站空间网站营销单页怎么做
  • 大型网站seo方案网站开发项目提成
  • 网站内部结构优化内蒙古自治区生态文明建设网站
  • 部门网站建设管理合肥seo招聘
  • 自己如何做网站源码北京商场关门
  • 做app必须有网站吗免费网站推广大
  • 郑州男科医院十大排名太原seo外包服务
  • 余姚 网站建设包头网络
  • 德文网站建设南阳网站建设优化
  • 推广关键词排名方法seo广告投放是什么意思
  • 福州外网站建设网站建设阿华seo
  • 网站统计系统 怎么做保定网站建设制作开发平台
  • 做婚恋网站挣钱吗做网站 修复漏洞
  • 志成网站设计制作学校网站建设发展概况分析
  • 浙江省工程建设协会网站网站建设小程序湖南
  • 建筑行业网站模板做网站要学哪些
  • 旅游网站如何做推广门户网站开发用什么框架好
  • 珠海 网站开发大连网站制做公司
  • 网站开发与推广我想学编程
  • 广西灵山县建设局网站构建网站需要会什么
  • 榆次网站建设公司自己创业做原公司一样的网站
  • 湖北 商城网站建设郫都区规划建设局网站
  • 做网站公司西安网站名称是什么意思
  • 徐州有哪些制作网站的公司吗中山模板建站软件
  • 网站后台建设动漫制作专业大学
  • 程序员找工作的网站网站建设的公司资质
  • 怎么优化网站排名具体怎么做免费申请网站空间及域名