给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点
root。两节点之间路径的 长度 由它们之间边数表示。
示例 1:
输入:root = [1,2,3,4,5] 输出:3 解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。
核心思路
- 某节点为最高点的最长路径 = 左子树深度 + 右子树深度
- 全局直径 = 遍历所有节点,取上述值的最大值
- 后序遍历:先求左右深度,再更新全局最大直径
python
class Solution:
def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
self.max_len = 0
def dfs(node):
if not node:
return 0
left_depth = dfs(node.left)
right_depth = dfs(node.right)
self.max_len = max(self.max_len, left_depth + right_depth)
return max(left_depth, right_depth) + 1
dfs(root)
return self.max_len
