给你一棵二叉树的根节点,返回该树的直径。
二叉树的直径是指树中任意两个节点之间最长路径的长度。这条路径可能经过也可能不经过根节点
root。两节点之间路径的长度由它们之间边数表示。
示例 1:
输入:root = [1,2,3,4,5]输出:3解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。
核心思路
- 某节点为最高点的最长路径 = 左子树深度 + 右子树深度
- 全局直径 = 遍历所有节点,取上述值的最大值
- 后序遍历:先求左右深度,再更新全局最大直径
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