1. 问题背景与理解
二叉树的直径问题(LeetCode 543)是一个经典的递归应用场景。这道题要求我们找到二叉树中任意两个节点间最长路径的长度。这个路径可能穿过根节点,也可能完全位于某个子树中。
在实际开发中,类似的问题经常出现在社交网络的好友关系分析、组织结构图的层级计算、文件系统的目录深度统计等场景。理解这类问题的解法,对处理树形结构数据非常有帮助。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心概念解析
2.1 什么是二叉树的直径
二叉树的直径定义为树中任意两个节点间最长路径的边数。注意几个关键点:
- 直径不一定经过根节点
- 路径长度按边数计算(不是节点数)
- 空树的直径为0
2.2 递归思路分析
解决这个问题的关键在于:
- 对每个节点,计算其左右子树的深度
- 当前节点的可能最大直径 = 左子树深度 + 右子树深度
- 维护一个全局变量记录最大直径
3. 算法实现详解
3.1 基础递归解法
python复制class Solution:
def diameterOfBinaryTree(self, root: TreeNode) -> int:
self.max_diameter = 0
def depth(node):
if not node:
return 0
left_depth = depth(node.left)
right_depth = depth(node.right)
self.max_diameter = max(self.max_diameter, left_depth + right_depth)
return max(left_depth, right_depth) + 1
depth(root)
return self.max_diameter
3.2 代码解析
- 使用一个类变量
max_diameter记录最大直径 - 定义嵌套函数
depth计算每个节点的深度 - 在计算深度时,同时更新最大直
