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

LeetCode 543 二叉树的直径

二叉树的直径:树中任意两个节点间最长路径的长度。这个路径可能经过根节点,也可能不经过。

算法思路

采用深度优先搜索(DFS)的后序遍历方式,计算每个节点的左右子树高度,并在过程中更新最大直径。

代码解析

var diameterOfBinaryTree = function(root) {let ans = 0  // 用于记录当前找到的最大直径const dfs = (node) => {if (node === null) {return 0  // 空节点的高度为0}// 递归计算左右子树的高度const lLen = dfs(node.left)const rLen = dfs(node.right)// 更新最大直径:当前节点作为"转折点"时的路径长度ans = Math.max(ans, lLen + rLen)// 返回当前节点的高度(左右子树中较高的那个 + 1)return Math.max(lLen, rLen) + 1}dfs(root)  // 从根节点开始遍历return ans
};

关键点解释

  1. 后序遍历:先处理左右子树,再处理当前节点,这确保了在计算当前节点时,其子树的信息已经计算完成。

  2. 高度计算:对于每个节点,我们计算其左右子树的高度:

    • lLen 是左子树的高度
    • rLen 是右子树的高度
  3. 直径更新:直径是通过某个节点的最长路径,这个路径长度等于左子树高度 + 右子树高度。我们不断用这个值更新全局最大值 ans

  4. 返回值:每个节点返回的是以它为根的子树的高度,这是为了父节点能够计算它自己的直径。

示例分析

考虑以下二叉树:

      1/ \2   3/ \     4   5    

计算过程:

  1. 节点4:lLen=0, rLen=0 → ans=0, 返回1
  2. 节点5:lLen=0, rLen=0 → ans=0, 返回1
  3. 节点2:lLen=1(来自4), rLen=1(来自5) → ans=2, 返回2
  4. 节点3:lLen=0, rLen=0 → ans=2, 返回1
  5. 节点1:lLen=2(来自2), rLen=1(来自3) → ans=3, 返回3

最终直径为3(路径[4,2,1,3]或[5,2,1,3]的长度)

时间复杂度

  • 时间复杂度:O(n),其中n是树中的节点数。每个节点只被访问一次。
  • 空间复杂度:O(h),其中h是树的高度。这是递归调用栈的空间消耗。
http://www.xdnf.cn/news/9651.html

相关文章:

  • 使用Miniconda管理Python环境
  • MS3494模拟矩阵开关
  • transformer-PositionalEncoding (对数空间计算实现)
  • 行业案例 | OPPO借助Azure AI Speech国际服务实现音频文件智能转录
  • 基于MATLAB的二维圆形随机骨料生成程序
  • APL Photonics封面成果:KAUST用五边形激光腔刷新物理随机数生成极限——800Gb/s!
  • Selenium 测试框架 - JavaScript
  • Xamarin入门笔记(Xamarin已经被MAUI取代)
  • 利益相关者意见分歧,如何决策
  • 在线临床指标分类信息表转甜甜圈矩阵图
  • 将git最后一次提交把涉及到的文件按原来目录结构提取出来
  • LLM中的Loss与Logits详解
  • 【leetcode】206. 反转链表
  • Linux Shellcode开发(Stager Reverse Shell)
  • 简述MySQL优化锁方面你有什么建议?
  • 彰显国产力量|暴雨亮相2025 C3安全峰会
  • Guava限频器RateLimiter的使用示例
  • STM32学习第一课--工程建立(云端备份与自我复盘)
  • ROS2学习(16)------ URDF 机器人建模方法
  • 操作系统 | 第一章:操作系统引论思维导图
  • 解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)
  • Java—多线程
  • 如何使用 poetry 创建虚拟环境,VSCode 如何激活使用 Poetry 虚拟环境(VSCode如何配置 Poetry 虚拟环境)
  • MVCC原理解析
  • js 手写promise
  • 专栏更新通知
  • Python 科学计算有哪些提高运算速度的技巧
  • 力扣——1.两数之和
  • 【论文阅读】User Diverse Preference Modeling by Multimodal Attentive Metric Learning
  • 【笔记】修改abu量化本地部署数据文件夹目录