面试知识库

543. 二叉树的直径#

生命的横跨:寻找树中的最大距离#

想象你站在一片茂密的森林中,试图找出从一个极端到另一个极端最长能走多远。在二叉树的世界里,直径就是这样一种量度 —— 它不仅仅是一个数字,更是树的生命力和广度的见证。

问题描述#

题目目标#

给定一棵二叉树,你需要计算它的直径长度。二叉树的直径是任意两个节点路径长度中的最大值,这条路径可能经过也可能不经过根节点。这里的路径长度指两节点之间边的数目。

示例 1#

输入: root = [1,2,3,4,5] 输出: 3 二叉树示意:

   1
 /  \
 2  3
/ \
4 5
text

说明: 最长路径可以是 4 -> 2 -> 1 -> 3 或 5 -> 2 -> 1 -> 3,一共经过 3 条边,所以答案是 3。

补充说明#

  • 二叉树通常使用层序数组表示,null 表示该位置没有节点。

直径的本质:不仅仅是长度#

二叉树的直径(LeetCode第543题)是树中任意两个节点之间最长路径的长度。这个定义乍看可能简单,但蕴含着深刻的算法智慧。关键在于:

  • 路径可以不经过根节点
  • 长度定义为路径经过的边的数量
  • 需要遍历整棵树才能找到最长路径

解题思路:寻径之旅的递归哲学#

解决这个问题的核心是理解:树的直径 = 左子树深度 + 右子树深度

代码的深层逻辑解析#

  1. maxDiameter 全局变量

    • 记录树的最大直径
    • 在遍历过程中不断更新
  2. calculateDepth() 方法

    • 同时完成两个任务: a. 计算节点深度 b. 更新最大直径
  3. 直径计算的关键:leftDepth + rightDepth

    • 代表穿过当前节点的最长路径
    • 不一定经过根节点

迭代方法:显式深度遍历#

性能分析:算法的呼吸#

时间复杂度:O(n)#

  • 每个节点仅访问常数次
  • n为树中节点总数

空间复杂度:O(h)#

  • h为树的高度
  • 最坏情况可达O(n)
  • 最好情况(平衡树)为O(log n)

深度思考:直径背后的数学之美#

  1. 为什么深度和直径如此紧密相连?
  2. 如何理解树的”横跨”概念?
  3. 递归如何帮助我们解决复杂的遍历问题?

实际应用场景#

  • 网络拓扑分析
  • 社交网络中的影响力研究
  • 生物进化树的直径研究
  • 组织结构的层级分析

递归的诗:寻径的艺术#

二叉树直径不仅仅是一道算法题,更是递归思想的诗意展现。它教会我们:

  • 复杂问题可以通过重复的简单逻辑解决
  • 全局性质可以通过局部遍历逐步揭示
  • 代码的优雅源于对问题本质的深刻理解

记住,探索二叉树的直径就像穿越知识的森林,重要的是保持好奇和系统的思考!