024 · Diameter of Binary Tree

algorithm
Published

May 28, 2026

Problem

给定一棵二叉树的根节点 root

请返回这棵二叉树的直径。

二叉树的直径,指的是树中任意两个节点之间最长路径的长度。

这里的长度不是节点数量,而是路径上的边数。

例如,下面这棵树的直径是 3

      1
     / \
    2   3
   / \
  4   5

最长路径可以是:

4 -> 2 -> 1 -> 3

也可以是:

5 -> 2 -> 1 -> 3

这条路径经过了 3 条边,所以直径是 3

注意,最长路径不一定必须经过根节点。

例如:

        1
       /
      2
     / \
    3   4
   /
  5

这里一条较长的路径可以在左子树内部形成,不需要从根节点 1 开始。

Examples

示例 1

Input:  root = [1,2,3,4,5]
Output: 3

解释:最长路径可以是 4 -> 2 -> 1 -> 3,一共有 3 条边。

示例 2

Input:  root = [1,2]
Output: 1

解释:节点 1 和节点 2 之间只有一条边,所以直径是 1

示例 3

Input:  root = [1]
Output: 0

解释:只有一个节点时,没有边可以连接两个不同节点,所以直径是 0

Constraints

  • 树中节点的数量范围是 \([1, 10^4]\)
  • \(-100 \leq\) Node.val \(\leq 100\)